<?php
header("content-type:text/html;charset=gbk");
$str="j这是ces测试dkfjdksj";function substr_gbk($str,$start,$end)
{
$temp="";
for($i=$start;$i<=$end;$i++)
{
if(ord($str{$i})>0xa0)
{
$temp.=substr($str,$i,2);
$i++;
}else
{
$temp.=substr($str,$i,1);
}
}
return $temp;
}echo substr_gbk($str,1,10); //从高字节截取正常
echo substr_gbk($str,2,10); //从低字节截取出现乱码
?>
以上代码从高字节截取没有问题,但如果从低字节截取出现乱码
请问有知道如果判断高低字节的办法吗?

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2013-10-30 11:08:53 编辑
      

  2.   

    gb2312 字节内码从 0xa1 开始
      

  3.   

    <?php
    header("content-type:text/html;charset=gbk");
    $str="c这是ces测试dkfjdksa";function substr_gbk($str,$start,$end)
    {
    for($i=0;$i<strlen($str);$i++)
    {
    if(ord(substr($str,$i,1))>0xa0)
    {
    $temp[]=substr($str,$i,2);
    $i++;
    }else
    {
    $temp[]=substr($str,$i,1);
    }
    }  return implode("",array_slice($temp,$start,$end));
    }print_r(substr_gbk($str,0,3));
    ?>用这个土办法倒是可以,效率太低
    大家有什么好办法吗
      

  4.   

    我就奇怪,他用的是gbk,遇到81开头的汉字怎么办?
      

  5.   

    我就奇怪,他用的是gbk,遇到81开头的汉字怎么办?
    嗯 老大咱别纠结这个问题行吗 您告诉我怎么判断如果是截取到低字节如何判断就行了 谢谢了
      

  6.   

    还以为你研究算法呢,用mb_substr
      

  7.   


    这个试过了,不行的
    您试下<?php
    header("content-type:text/html;charset=gbk");
    $str="这是ces测试dkfjdksa";
    echo mb_substr($str,1,5); //乱码
    ?>
      

  8.   

    mb_substr($str,1,5,'gbk')