Heim >Backend-Entwicklung >PHP-Tutorial >求教,如何判断是否是低字节?

求教,如何判断是否是低字节?

WBOY
WBOYOriginal
2016-06-23 14:25:531139Durchsuche

<?phpheader("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); //从低字节截取出现乱码?>


以上代码从高字节截取没有问题,但如果从低字节截取出现乱码
请问有知道如果判断高低字节的办法吗?


回复讨论(解决方案)

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

$str="j这是ces测试dkfjdksj"; function substr_gbk($str,$start,$end){    $temp="";    for($i=0; $i<$start; $i++) if(ord($str{$i})>0xa0) $i++; //加上这行    for(;$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); //这是ces测试echo substr_gbk($str,2,10); //是ces测试

定 0xa0 的准则是什么?

gb2312 字节内码从 0xa1 开始

定 0xa0 的准则是什么?

就是从0xa1也一样是乱码啊

<?phpheader("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));?>


用这个土办法倒是可以,效率太低
大家有什么好办法吗

gb2312 字节内码从 0xa1 开始


定 0xa0 的准则是什么?
我就奇怪,他用的是gbk,遇到81开头的汉字怎么办?


gb2312 字节内码从 0xa1 开始


定 0xa0 的准则是什么?
我就奇怪,他用的是gbk,遇到81开头的汉字怎么办?


嗯 老大咱别纠结这个问题行吗 您告诉我怎么判断如果是截取到低字节如何判断就行了 谢谢了

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

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

这个试过了,不行的
您试下

<?phpheader("content-type:text/html;charset=gbk");$str="这是ces测试dkfjdksa";echo mb_substr($str,1,5); //乱码?>

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn