Heim >php教程 >php手册 >PHP如何限制字符串显示长度

PHP如何限制字符串显示长度

WBOY
WBOYOriginal
2016-06-06 20:05:312875Durchsuche

将一些字符串显示到页面中,规定不超过一定的长度。

先要获取到字符串的长度,strlen( )和mb_strlen( )两个函数可以获取,而这两个函数有有所不同

<?php  
    //测试时文件的编码方式要是UTF8  
    $str=&#39;中文a字1符&#39;;  
    echo strlen($str).&#39;<br>';//14  
    echo mb_strlen($str,'utf8').'<br>';//6  
    echo mb_strlen($str,'gbk').'<br>';//8  
    echo mb_strlen($str,'gb2312').'<br>';//10  
?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .

利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)

echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;

例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和 strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。

需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

获取到字符长度之后,超过部分就截取掉,用.去填充一些已表示被截取过,即可。

if(mb_strlen($str)>200){
    $newStr = mb_substr($str,0,60,"UTF8")."...";
}

mb_substr( )跟substr( )其实差不多,mb_substr( )用UTF8去计算,一个字就是一位,比较便于截取。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn