本文主要是介绍中英文字符串截取类备忘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
算法的大概思路是遍历每一个字符串的每一个字节,通过这个字节的ASCII码来判断这个字符是中文还是英文字符,一般来说,GBK用两个字节来表示一个汉字,任意一个字节不小于0x80;GB2312也用2个字节表示一个汉字,任何一个字节不小于0xa0;utf-8用3或4个字节来表示一个汉字。这里以GB2312为例:只要字符的第一个字节的ASCII码大于0xa0,即为中文字符,占两个字节;否则为英文字节,占一个字节,用ord( ) 函数可以返回字符串的第一个字符的ASCII码。注意判断完以后用 .= 来赋值,而不能直接用 = ,否则就替换了。
<?phpclass mysubstr{function csubstr($str,$len){ //$len表示截取的字节数,不是字符数for($i=0;$i<$len;$i++){if (ord(substr($str,$i,1)) > 0xa0){ //substr($str,$i,1)用来读当前$i位置上的字节$str_result.=substr($str,$i,2);//判断出是汉字后,要连读两个字节$i++;//因为一下子读完了2个字节,要补一个$i++}else{$str_result.=substr($str,$i,1);//英文字符只要读一个字节}}return $str_result;}}
$substr_test =new mysubstr();
$str="abc少年";
echo $substr_test->csubstr($str,7)."...";//对象名前不要忘了$?>
这篇关于中英文字符串截取类备忘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!