在utf-8编码下,在使用strlen()时,一个中英文字符是占一个字节,而一个中文字符是占三个字节。因此在调用strrev函数时,如果字符串是纯英文,不会出现什么问题,但是如果字符中含有中文则会出现乱码。
$str ='hello';
echo strlen($str);//5
echo strrev($str); //olleh
$str.=",小明"; //一个中文字符占三个字节
echo strlen($str);//12
echo strrev($str); //会出现乱码
如果要实现中文字符串翻转无乱码,可以通过mb_substr()实现。mb_substr并不是php的核心函数,默认情况下是不能调用mb_substr()函数的,因此需要我们自己在php的配置开启extension=php_mbstring.dll
function strReverse($str){
$len=mb_strlen($str,"utf-8");
for($i=0;$i<$len;$i++){
$data[]=mb_substr($str,$i,1,'utf-8');
}
$data=array_reverse($data);
return imlode($data);
}
echo strReverse($str); //明小,olleh