广

PHP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    不用iconv库的gb2312与utf-8的互换函数

    2018-10-13 10:39:06 次阅读 稿源:互联网
    零七广告

    一份gb2312.txt(184799字节)确实显得太大了点,而且还要经unicode转换。
    这份对照表为51965字节,要小的多了。
    对于无法使用iconv函数库的场合还是很实用的。

    <?php
    //对照表的使用
    $filename = "gb2utf8.txt";
    $fp = fopen($filename,"r");
    while(! feof($fp)) {
    list($gb,$utf8) = fgetcsv($fp,10);
    $charset[$gb] = $utf8;
    }
    fclose($fp);
    //以上读取对照表到数组备用

    /** gb2312到utf-8 **/
    function gb2utf8($text, &$charset) {
    //提取文本中的成分,汉字为一个元素,连续的非汉字为一个元素
    preg_match_all("/(?:[/x80-/xff].)|[/x01-/x7f]+/",$text,$tmp);
    $tmp = $tmp[0];
    //分离出汉字
    $ar = array_intersect($tmp, array_keys($charset));
    //替换汉字编码
    foreach($ar as $k=>$v)
    $tmp[$k] = $charset[$v];
    //返回换码后的串
    return join('',$tmp);
    }

    /** utf-8到gb2312 **/
    function utf82gb($text, &$charset) {
    $p = "/[xf0-xf7][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc2-xdf][x80-xbf]|[x01-x7f]+/";
    preg_match_all($p,$text,$r);
    $utf8 = array_flip($charset);
    foreach($r[0] as $k=>$v)
    if(isset($utf8[$v]))
    $r[0][$k] = $utf8[$v];
    return join('',$r[0]);
    }

    //测试
    $s = gb2utf8('这是对照表的测试', $charset);
    echo utf82gb($s, $charset);
    ?>

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告