php substr中文乱码解决办法

如果直接使用substr截取中文字符串肯定会出乱码的,因为他会把一个汉字分成一半,为什么会这样,因为机器内部编码的问题,现在我们来看处理办法

1、使用mbstring扩展库的mb_substr截取就不会出现乱码了。

2、自己书写截取函数,但效率不如用mbstring扩展库来得高。

3、如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0).

PHP实例代码如下:

  1. * 可以避免乱码的截取汉字
  2. * 参数 $str 为字符串,$start 为开始字符,$len 结束字符
  3. * 返回截取后的字符
  4. */
  5. function msubstr($str, $start, $len) {
  6. $tmpstr = "";//开源代码phpfensi.com
  7. $strlen = $start + $len;
  8. for($i = 0; $i < $strlen; $i++) {
  9. if(ord(substr($str, $i, 1)) > 0xa0) {
  10. $tmpstr .= substr($str, $i, 2);
  11. $i++;
  12. } else
  13. $tmpstr .= substr($str, $i, 1);
  14. }
  15. return $tmpstr;
  16. }

方法二,php实现中文字串截取无乱码的方法,代码如下:

  1. function gbsubstr($string, $start, $length) {
  2. if(strlen($string)>$length){
  3. $str=null;
  4. $len=$start+$length;
  5. for($i=$start;$i<$len;$i++){
  6. if(ord(substr($string,$i,1))>0xa0){
  7. $str.=substr($string,$i,2);
  8. $i++;
  9. }else{
  10. $str.=substr($string,$i,1);
  11. }
  12. }
  13. return $str.'...';
  14. }else{
  15. return $string;
  16. }
  17. }
  18. ?>