http://php.net/manual/zh/function.mb-substr.php

解决方案 »

  1.   

    $str = '这样一来我的字符串就不会有乱码^_^';echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');
    //结果:这样一来我的字
    echo "
    ";echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
    //结果:这样
    ?>
      

  2.   


    <?php
    //此函数完成带汉字的字符串取串
    function substr_CN($str,$mylen){                                                                                                                                        
    $len=strlen($str);
    $content='';
    $count=0;
    for($i=0;$i<$len;$i++){
       if(ord(substr($str,$i,1))>127){
        $content.=substr($str,$i,2);
        $i++;
       }else{
        $content.=substr($str,$i,1);
       }
       if(++$count==$mylen){
        break;
       }
    }
    echo $content;
    } $str="34中华人民共和国56";
    substr_CN($str,3);//输出34中
    ?>
      

  3.   

    PHP如何截取字符串
    <?php 
    echo substr("She is a well-read girl",0);        //从第6个字符开始截取
    echo "<br>";
    echo substr("She is a well-read girl",4,14);      //从第4个字符开始连续截取14个字符
    echo "<br>";
    echo substr("She is a well-read girl",-4,4);        //从倒数第4个开始截取4个字符
    echo "<br>";
    echo substr("She is a well-read girl",0,-4);        //从第一个字符开始截取,截取到倒数第4个字符
    ?>
      

  4.   

    这个说的可行,字符串可以当成数组来遍历,汉字是两个字节一个编码, 所以 if(ord(substr($str,$i,1))>127){
        $content.=substr($str,$i,2);
        $i++;在解决中文还是可以的ASCII是一个字节的编码,所以else{
        $content.=substr($str,$i,1);
       }其实完全可以把if(ord(substr($str,$i,1))>127再细化一下,毕竟大于127的不仅仅是汉字,比如可以在此用正则匹配
      if(preg_match('#[\x{4e00}-\x{9fa5}]#u', $string, $match))来进行判断,中文的范围在\x4e00---\x9fa5范围内