[转]解决PHP截取中文字符串问题_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > [转]解决PHP截取中文字符串问题

[转]解决PHP截取中文字符串问题

 2014/12/1 2:27:58  gxl_ct001  程序员俱乐部  我要评论(0)
  • 摘要:解决PHP截取中文字符串问题PHP截取字符串如果是英文那很好办,直接用substr就行了,一般不会出现乱码.中文就有点麻烦了.下面给出两种解决办法:(一)直接使用Multi-Byte函数库的mb_substr();函数就行了,实例代码如下<?phpechomb_substr($str,$start,$length,$encoding);echo"<br/>";?>这种方法简单,快速,安全,漂亮,诱惑...反正什么好词都可以形容它,但是,可惜我的GoDaddy主机不支持
  • 标签:解决 PHP 问题 字符串

class="postTitle">解决PHP截取中文字符串问题

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

<?php  
echo mb_substr($str, $start, $length, $encoding); 
echo "<br />"; 
?> 

?

这种方法简单,快速,安全,漂亮,诱惑...反正什么好词都可以形容它,但是,可惜我的GoDaddy主机不支持,所以得另寻出路
(二)自定义截取中文字符串函数,基本上就是仿照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); 
}//en

?

原文网址:http://www.cnblogs.com/likebeta/archive/2011/04/17/2005955.html

?

发表评论
用户名: 匿名