PHP中中文字符串出现乱码如何解决

  

PHP中中文字符串出现乱码如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

function 子串(str美元,美元开始,,美元长度){,//比较好用字符串截取函数   时间=美元才能len 美元长度;   如果才能(length 美元;& lt;, 0) {   时间=美元才能str  strrev (str);   美元才能len =, - $长度;   ,,}   美元才能len=, (len 美元;& lt;, strlen (str)美元),?,len 美元;:,strlen (str);   时间=美元才能tmpstr “,“;   for 才能;(i=,开始,美元,美元小姐:& lt;, len;美元,美元小姐:+ +)   {才能   ,,,,,if (奥德(substr (str美元,,我,,1)),祝辞,0 xa0)   ,,,,,{   ,,,,,,tmpstr 美元。=,substr (str美元,,我,,2);   ,,,,,,我+ +美元;   ,,,,,},{else    ,,,,,,tmpstr 美元。=,substr (str美元,,我,,1);   ,,,,,}   ,,}   如果才能(length 美元;& lt;, 0), tmpstr 美元;=,strrev ($ tmpstr);   return 才能;tmpstr美元;   }

使用方法示例:

str1 美元;=,& # 39;我是一串比较长的中文不带英文& # 39;;   时间=美元str2  & # 39;我是一串比较长的中文带yingwen& # 39;;         $ len =, strlen ($ str1);   echo  & # 39; & lt; br /祝辞& # 39;len美元;//return  28      $ len =, strlen ($ str2);   echo  & # 39; & lt; br /祝辞& # 39;len美元;//return  29      echo  & # 39; & lt; br /祝辞& # 39;,,,   echo 子串(str1美元,,0,,11),,,   echo  & # 39; & lt; br /祝辞;& # 39;;   echo 子串(str2美元,,0,,11),,,,,   echo  & # 39; & lt; br /祝辞;& # 39;;   echo 子串(str1美元,16日,28);,,   echo  & # 39; & lt; br /祝辞;& # 39;;   echo 子串(str2美元,16日,29);

结果显示:


28日29日
我是一串比较
我是一串比较
中文不带英文
中文带yingwen

这个函数十分有用,比如用来截断比较长的文件名,但是要在中间加上……,可以这样来做:

function  formatName (str美元,,大小){   时间=美元才能len  strlen (str);   如果才能(strlen (str)美元,祝辞,美元大小),{   ,,,part1 美元;=,substring (str美元,,0,,size 美元/,2);   ,,,part2 美元;=,substring (str美元,美元len 作用;(大?2美元),,len美元);   ,,,return  part1 美元;只“…“,只美元part2;   ,,},{else    ,,,return  str美元;   ,,}   }

另外,网上看到一种超级简单的中文截断解决方案,试用了一下,效果也不错:

回声substr (str1美元,0,10).chr (0);

原理解释:

科(0)不零
是07年零是什么都没有,而科(0)的值是0。表示成16进制是0 x00,表示成二进制是00000000
08年虽然科(0)不会显示出什么,但是他是一个字符。
09年当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。而值为0 x81到0 xff与0 x00组合始终都显示为“空”
10根据这一特点,在字符串的子串的结果后面补上一个空空的(0),就可以防止出现乱码了

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

20120705更新:,

以上方法虽好,但是偶尔还是会碰到乱码,原因未深究。不过可以用以下的方法,对UTF8字符文本屡试不爽。
注意:该方法中将汉字计算为1单位长度,英文一个字母1单位长度,所以截断时需要注意长度设置。
计算长度的方法:

function  strlen_UTF8 (str)美元   {   时间=美元才能len  strlen (str);   时间=美元才能n  0;   ,,($小姐:=,0;,美元小姐:& lt;, len;美元,美元我+ +),{   ,,,x 美元;=,substr (str美元,,我,,1);   ,,,a 美元;=,base_convert(奥德($ x), 10日,2);   ,,,a 美元;=,substr(& # 39; 00000000 & # 39;。一美元,8);   ,,,if  (substr(一个美元,,0,1),==,0),{   ,,,}elseif  (substr(一个美元,,0,,3),==,110),{   ,,,,,小姐:美元+=,1;   ,,,}elseif  (substr(一个美元,,0,4),==,1110),{   ,,,,,小姐:美元+=,2;   ,,,}   ,,,$ n + +;   ,,}   return 才能;$ n;   },//,最终获得strlen_UTF8;

字符串截断函数:

function  subString_UTF8 (str美元,美元开始,美元披散下来)   {才能   ,,,len 美元;=,strlen (str);   ,,,r 美元;=,数组();   ,,,n 美元;=,0;   ,,,m 美元;=,0;   ,,,($小姐:=,0;,美元小姐:& lt;, len;美元,美元我+ +),{   ,,,,,x 美元;=,substr (str美元,,我,,1);   ,,,,,a 美元;=,base_convert(奥德($ x), 10日,2);   ,,,,,a 美元;=,substr(& # 39; 00000000 & # 39;。一美元,8);   ,,,,,if  (n 美元;& lt;,美元开始){   ,,,,,,,if  (substr(一个美元,,0,1),==,0),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

PHP中中文字符串出现乱码如何解决