PHP中的多字节字符串处理
PHP中处理单字节编码的字符串(ASCII-compatible)时,str*()系列函数就可以完全正常工作,但是在处理多多字节编码的字符串时,比如处理下面utf-8编码的中文字符串$str=”多字节字符串测试”;时,问题就出来了大大:
$str="多字节字符串测试"; //8 characters
echo strlen($str); //结果却是24
?>
当然如果使用trim, split, splice,这些函数的结果就自然而然的会出现一些意想不到的结果。
当处理多字节(比如:中文)字符串的时候,PHP给我们提供了一组以mb_开头的trim, split,
splice的多字节版本Multibyte String Functions这样我们就可以很好的对多字节字符串进行处理了:
$str=”多字节字符串测试”; //8 characters
echo strlen($str); //24
mb_internal_encoding(”UTF-8″); //当前字符串使用的编码
echo mb_strlen($str); //8
echo mb_substr($str,-1); //试
echo mb_substr($str,1); //字节字符串测试
?>
有意思的是mb_*系列函数中还包括了mb_ereg_*()函数,这听起来是个好事,但是实际上ereg_*()和preg_*()系列函数已经内置了对多字节的支持了:
$str="多字节字符串测试"; //8 characters
echo ereg_replace("^多","单",$str)."
"; //单字节字符串测试
echo ereg_replace("测试$","",$str)."
"; //多字节字符串
echo ereg_replace("(字符串)","\\1反向引用替换",$str)."
"; //多字节字符串反向引用替换测试
echo ereg_replace("\s","替换",$str)."
"; //多字节字符串测试
?>
使用preg_*() 也可以一样的工作:
$str="多字节字符串测试"; //8 characters
echo preg_replace("/^多/","单",$str);
echo preg_replace("/测试$/","",$str);
echo preg_replace("/(字符串)/","\\1反向引用替换",$str;
echo preg_replace("/\s/","替换",$str);
?>
