| 网站镜像:电信 网通 | 加入收藏 | 设为首页

php中文处理函数

  • <?
    /*
    php使用ISO-8859-1处理字符串,也就是以单字节处理字符串。中文码属于多字节字符,在使用substr,
    strlen,str_peplace等函数时很容易产生错误,处理中文特殊操作,必须使用一组中文处理函数。下面是
    GBK的substr,strlen操作函数,前者并不像php的substr一样可以使用负数作为start,lenght.希望大家
    来不断完善这些函数,达到高效实用的程度。
    */
    //gbk str handle
    function gbk_substr(&$str,$start,$length=-1)
    {
    if($length==0) return "";
    if($start<0) $start=0;
    for($i=0;$i<$start;$i++)
    {
    if(ord(substr($str,$i,1))>=0x81)
    {
    $start++;
    $i++;
    }
    }
    if($start>gbk_strlen($str)) return "";
    $ss="";
    if($length==-1)
    {
    $ss=substr($str,$start);
    }
    else
    {
    echo "leghth=".$length."\n";
    for($i=$start;$i<$start+$length;$i++)
    {
    if(ord(substr($str,$i,1))>=0x81)
    {
    $ss.=substr($str,$i,2);
    $length++;
    $i++;
    }
    else
    {
    $ss.=substr($str,$i,1);
    }
    }
    }
    return $ss;
    }

    function gbk_strlen(&$str)
    {
    $len=strlen($str);
    $l=0;
    for($i=0;$i<$len;$i++)
    {
    if(ord(substr($str,$i,1))>=0x81) $i++;
    $l++;
    }
    return $l;
    }

    function gb2312_strlen(&$str)
    {
    $len=strlen($str);
    $l=0;
    for($i=0;$i<$len;$i++)
    {
    if(ord(substr($str,$i,1))>=0xa1) $i++;
    $l++;
    }
    return $l;
    }

    ?>