php不使用iconv庫進行gb2312與utf-8編碼轉換的函數

來源:互聯網
上載者:User
  1. //對照表的使用

  2. $filename = "gb2utf8.txt";
  3. $fp = fopen($filename,"r");
  4. while(! feof($fp)) {
  5. list($gb,$utf8) = fgetcsv($fp,10);
  6. $charset[$gb] = $utf8;
  7. }
  8. fclose($fp);
  9. //以上讀取對照表到數組備用

  10. /** gb2312到utf-8 **/

  11. function gb2utf8($text, &$charset) {
  12. //提取文本中的成分,漢字為一個元素,連續的非漢字為一個元素
  13. preg_match_all("/(?:[\x80-\xff].)|[\x01-\x7f]+/",$text,$tmp);
  14. $tmp = $tmp[0];
  15. //分離出漢字
  16. $ar = array_intersect($tmp, array_keys($charset));
  17. //替換漢字編碼
  18. foreach($ar as $k=>$v)
  19. $tmp[$k] = $charset[$v];
  20. //返回換碼後的串
  21. return join('',$tmp);
  22. }

  23. /** utf-8到gb2312 **/

  24. function utf82gb($text, &$charset) {
  25. $p = "/[xf0-xf7][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc2-xdf][x80-xbf]|[x01-x7f]+/";
  26. preg_match_all($p,$text,$r);
  27. $utf8 = array_flip($charset);
  28. foreach($r[0] as $k=>$v)
  29. if(isset($utf8[$v]))
  30. $r[0][$k] = $utf8[$v];
  31. return join('',$r[0]);
  32. }

  33. //測試

  34. $s = gb2utf8('這是對照表的測試', $charset);
  35. echo utf82gb($s, $charset);
  36. ?>

複製代碼
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.