建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网站开发 > PHP教程 >

PHP截取中文字符串出现乱码的解决办法

时间:2011-04-06 09:56来源: 作者: 点击:
PHP截取字符串如果是英文那很好办,直接用substr就行了,一般不会出现乱码.中文就有点麻烦了. 下面给出两种解决办法: (一)直接使用Multi-Byte函数库的mb_substr();函数就行了,实例代码如下

我们都知道在程序中如果要截取字符串,是英文我们可以直接用substr就行了,是不会出现乱码的,如果是中文就很不好解决了。

下面给出两种解决办法:
(一)直接使用Multi-Byte函数库的mb_substr();函数就行了,实例代码如下

<?php 
echo mb_substr($str, $start, $length, $encoding);
echo "<br />";
?>
这种方法比较简单,但是有的服务器不支持,所以我们再介绍另一种方法

(二)自定义截取中文字符串函数,基本上就是仿照mb_substr写个函数,直接调用罢了,以下为我找到的代码,其实很简单

<?php 
function  substr_cn($string_input,$start,$length)
{
    /* 功能:
     * 此算法用于截取中文字符串
     * 函数以单个完整字符为单位进行截取,即一个英文字符和一个中文字符均表示一个单位长度
     * 参数:
     * 参数$string为要截取的字符串,
     * 参数$start为欲截取的起始位置,
     * 参数$length为要截取的字符个数(一个汉字或英文字符都算一个)
     * 返回值:
     * 返回截取结果字符串
     * */
    $str_input=$string_input;
    $len=$length;
    $return_str="";
    //定义空字符串
    for ($i=0;$i<2*$len+2;$i++)
        $return_str=$return_str." ";
    $start_index=0;
    //计算起始字节偏移量
    for ($i=0;$i<$start;$i++)
    {
        if (ord($str_input{$start_index}>=161))          //是汉语     
        {
            $start_index+=2;
        }
        else                                          //是英文
        {
            $start_index+=1;
        }        
    }    
    $chr_index=$start_index;
    //截取
    for ($i=0;$i<$len;$i++)
    {
        $asc=ord($str_input{$chr_index});
        if ($asc>=161)
        {
            $return_str{$i}=chr($asc);
            $return_str{$i+1}=chr(ord($str_input{$chr_index+1}));
            $len+=1; //结束条件加1
            $i++;    //位置偏移量加1
            $chr_index+=2;
            continue;            
        }
        else 
        {
            $return_str{$i}=chr($asc);
            $chr_index+=1;
        }
    }    
    return trim($return_str);
}//end of substr_cn
?>

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片