如何利用PHP来截取一段中文字符串而不出现乱码

由 jeffwu 在 11-25-2003 14:29 发表:

如何利用PHP来截取一段中文字符串而不出现乱码

标题:如何利用PHP来截取一段中文字符串而不出现乱码

作者:吴伟([email protected])

> PHP源码: > > * * * > >
>
> /*
>
> 功能:截取全角和半角混合的字符串以避免乱码
>
> 参数:
>
> $str_cut 需要截断的字符串
>
> $length 允许字符串显示的最大长度
>
>
>
> */
>
>
>
> function substr_cut ( $str_cut , $length = 30 ){
>
>
>
> if ( strlen ( $str_cut ) > $length ){
>
> for( $i = 0 ; $i < $length ; $i ++)
>
> if ( ord ( $str_cut [ $i ]) > 128 ) $i ++;
>
> $str_cut = substr ( $str_cut , 0 , $i ) . "..." ;
>
> }
>
> return $str_cut ;
>
> }
>
>
> &gt; &gt; * * * &gt; &gt;

说明:

程序的关键语句是:

> PHP源码: &gt; &gt; * * * &gt; &gt;
>
> for( $i = 0 ; $i < $length ; $i ++)
>
> if ( ord ( $str_cut [ $i ]) > 128 ) $i ++;
>
>
>
> $str_cut = substr ( $str_cut , 0 , $i ) . "..." ;
>
>
> &gt; &gt; * * * &gt; &gt;

如果字符的ASCII码大于128,说明当前字符和下一个字符是属于一个汉字的。

则,$i++ 跳过对下一个字符的判断。

再结合循环中的 $i++ ,实际上,当遇到一个汉字时,$i 就会加 2 ,从而正确的跳过汉字。

最终实现的效果是,$i 变量指向的要么是半角的字符,要么是全角汉字的首字符,不会指向

全角汉字的第二个字符,所以,当$i >= $length时,循环结束,使用

> PHP源码: &gt; &gt; * * * &gt; &gt;
>
> $str_cut = substr ( $str_cut , 0 , $i ) . "..." ;
>
>
> &gt; &gt; * * * &gt; &gt;

截取字符时自然也就不会出现乱码了。

本人在写一个程序时需要利用PHP从一段字符串中截取指定长度的一段字符下来。以前在写ASP的时候,参考动网的程序写过类似的程序,不过,还没用PHP写过。

想偷懒,看有不有现成的代码可以用。于是,在GOOGLE中输入:PHP 截断字符 后查找到一段代码。

全文: http://www.yesky.com/SoftChannel/72...1610570_3.shtml

引用:

#########################################################################

如何分别全角和半角以避免乱码?

我们可以写这样一个函数来实现:

> PHP源码: &gt; &gt; * * * &gt; &gt;
>
> function ChgTitle ( $title )
>
> {
>
> $length = 46 ; //我们允许字符串显示的最大长度
>
> if ( strlen ( $title ) >$length ) {
>
> $temp = 0 ;
>
> for( $i = 0 ; $i<$length ; $i ++)
>
> if ( ord ( $title [ $i ]) > 128 ) $temp <

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus