php截取中英文字符串php截取中英文字符串,没必要用substr或者mb_substr//截取这样的字符串a李三湘不确定字符串的组成是什么,也不确定要不要用substr或者mb_substr在使用mb_substr时,可以试试下面的方法。如果能解决你的烦恼,用ASCII/****中英文混合字符串截取*@paramunknown_type$sourcestr*@paramunknown_type$culength*/functionassoc_substr($sourcestr,$culength){$returnstr='';$i=0;$n=0;$str_length=strlen($sourcestr);//字符串中的字节数while(($n<$culength)and($i<=$str_length)){$temp_str=substr($sourcestr,$i,1);$ascnum=Ord($temp_str);//获取字符串中字符$i的ascii码if($ascnum>=224){//如果ASCII位高为224,$returnstr=$returnstr.substr($sourcestr,$i,3);//按照UTF-8编码规范,连续3个字符算一个字符$i=$i+3;//实际的Byte算作3$n++;//字符串长度算1}elseif($ascnum>=192){//如果ASCII位高为192,$returnstr=$returnstr.substr($sourcestr,$i,2);//按照UTF-8编码规范,连续2个字符算一个字符$i=$i+2;//实际的Byte算作2$n++;//字符串长度为1}elseif($ascnum>=65&&$ascnum<=90){//如果是大写字母,$returnstr=$returnstr.substr($sourcestr,$i,1);$i=$i+1;//实际的Byte个数还是按1算$n++;//但考虑到整体外观,大写字母算高位}elseif($ascnum>=97&&$ascnum<=122){$returnstr=$returnstr.substr($sourcestr,$i,1);$i=$i+1;//实际的Byte数还是1$n++;//但是考虑整个Beautiful,大写字母算作高位字符}else{//其他情况,半角标点符号,$returnstr=$returnstr.substr($sourcestr,$i,1);$i=$i+1;$n=$n+0.5;}}return$returnstr;}通过这个可以很方便的截取一些字符串等,避免因为字节不同导致乱码或者截取错误。
