header(content-type: text/html; charset=utf-8);function my_substr($str,$begin,$length){ $i = $begin; $result=; while($length > 0){ if([color=red]ord($str[$i])>127[/color]){ $result .= substr($str,$i,3); $i = $i+3; }else{ $result .= substr($str,$i,1); $i++; } $length--; } return $result; } $chinese = 中a国people; echo
.my_substr($chinese,0,3);
输出结果是:中a国
说明:
ord 是 对字符去assic值。
chr 是 对assic取字符。
为什么判断assic大于127。
这里是assic码表
http://www.asciitable.com/
计算机中最开始只有assic编码,用来表示字符。一个assic字符用一个byte表示。所以assic最多就只有256种组合。对于英文是够用了,中文,日文,韩文等亚洲语种就不够了。
那么只能考虑用多个byte表示一个中文汉字,比如gb2312 就是用2个字节表示一个汉字。在windows中用笔记本新建一个txt保存为assic,如果你是简体中文操作系统,txt中的中文就是一gb2312来保存的。上面的截取字符串的程序$result .= substr($str,$i,3);中的3就要改成2.同时别忘了修改header。而无论gb2312 还是utf8 他们表示a-z等assic 128以前的都是一样的,是一位btye表示,是变长编码的。所以可以用assic判断他们是不是中文。
写的可能比较乱。有需要的谨慎阅读。
