【发布时间】:2011-03-18 16:42:27
【问题描述】:
我从数据库中获取 UTF8 文本,我只想显示前 $len 个字符(以一个单词结尾)。我尝试了几个选项,但由于特殊字符(á、é、í、ó 等),该功能仍然不起作用。
感谢您的帮助!
function text_limit($text, $len, $end='...')
{
mb_internal_encoding('UTF-8');
if( (mb_strlen($text, 'UTF-8') > $len) ) {
$text = mb_substr($text, 0, $len, 'UTF-8');
$text = mb_substr($text, 0, mb_strrpos($text," ", 'UTF-8'), 'UTF-8');
...
}
}
编辑以添加示例
如果我截断包含 65 个字符的文本,它会返回:
Un jardín de estilo neoclásico acorde con el …
如果我更改特殊字符(í、á),则返回:
Un jardin de estilo neoclasico acorde con el Palacio de ...
我确定编码或服务器或 php 有一些奇怪的地方;但我想不通!谢谢!
最终解决方案
我正在使用这个UTF8 PHP library,现在一切正常...
【问题讨论】:
-
如果你不使用 text_limit 那么编码不会有问题,对吧?
-
文本显示没有任何问题。当我剪掉它时,问题就来了,那些特殊字符占据了几个字节,所以 text_limit() 返回一个非常短的字符串。
-
'mb_substr()' 应该切割 $len 个字符,而不是字节。您确定原始文本实际上是 UTF-8 而不是其他编码?!
-
@gordon,谢谢!但它不起作用,因为它几乎是一样的。 @w3d,我正在使用 'mb_check_encoding($string, 'UTF-8');'检查字符串是否有 UTF( 编码。我的数据库是 UTF8 的,我的 symfony 系统有 UTF8 作为它的默认字符集。
标签: php unicode utf-8 substring truncate