zoukankan      html  css  js  c++  java
  • PHP截取中文字符串方法总结

    PHP截取中文字符串有时会出现乱码

    一下代码使用三种方式解决乱码问题

    <?php 
    @header('Content-type: text/html; charset=UTF-8');
    $arr = "sa撒的发dfa多少sfd看sdf得12上24飞452机.@$#^辣^&%椒粉b";
    
    /******************************************************************
     * 程序一:PHP截取中文字符串方法
    * 截取中文字符串时出现乱码
    ****************************************************************/
    function msubstr($str, $start, $len) {
        $tmpstr = "";
        $strlen = $start + $len;
        for($i = 0; $i < $strlen; $i++) {
            if(ord(substr($str, $i, 1)) > 0xa0) {
                $tmpstr .= substr($str, $i, 2);
                $i++;
            } else
                $tmpstr .= substr($str, $i, 1);
        }
        return $tmpstr;
    }
    echo msubstr($arr, 0, 15);
    echo "<br><hr><br>";
    /******************************************************************
     * PHP截取UTF-8字符串,解决半字符问题。
    * 英文、数字(半角)为1字节(8位),中文(全角)为3字节
    * @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串
    * @param $str 源字符串
    * $len 左边的子串的长度
    ****************************************************************/
    function utf_substr($str,$len)
    {
        for($i=0;$i<$len;$i++)
        {
            $temp_str=substr($str,0,1);
            if(ord($temp_str) > 127)
                {
                $i++;
                if($i<$len)
                {
                $new_str[]=substr($str,0,3);
                $str=substr($str,3);
                }
        }
        else
        {
            $new_str[]=substr($str,0,1);
            $str=substr($str,1);
    }
    }
    return join($new_str);
    }
    echo utf_substr($arr, 39);
    echo "<br><hr><br>";
    
    /******************************************************************
     * PHP截取UTF-8字符串,解决半字符问题。
    * 截取utf-8字符串,截取后,用 ...代替被截取的部分
    * $length 左边的子串的长度
    ****************************************************************/
    function cutstr($string, $length) {
        preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/", $string, $info);
        for($i=0; $i<count($info[0]); $i++) {
            $wordscut .= $info[0][$i];
            $j = ord($info[0][$i]) > 127 ? $j + 2 : $j + 1;
            if ($j > $length - 3) {
                return $wordscut." ...";
            }
        }
        return join('', $info[0]);
    }
    echo cutstr($arr,14);
    echo "<br><hr><br>";
    ?>
  • 相关阅读:
    CakePHP Model中( 获取Session)使用Component的方法
    EDM站点
    PHP数组中插入元素
    (转)Html邮件CSS指南
    Expected one result (or null) to be returned by selectOne(), but found 2
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    myeclipse 控制台打印空指针 ,黏贴控制台sql到plsql有结果集,异常处理
    target="_blank"
    关于单点登录第一天接触之我见
    model is null
  • 原文地址:https://www.cnblogs.com/xcxc/p/2969286.html
Copyright © 2011-2022 走看看