在PHP中剪切UTF8文本

fes*_*sja 5 php unicode truncate substring utf-8

我从数据库中获取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');

    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑以添加示例

如果我截断65个字符的文本,它将返回:

Unjardíndeestiloneoclásicococorcon el ...

如果我更改特殊字符(í,á),则返回:

Un jardin de estilo neoclasico acorde con el Palacio de ...

我确定编码或服务器或php有些奇怪; 但我无法理解!谢谢!

最终解决方案

我正在使用这个UTF8 PHP库,现在一切正常......

Kel*_*ley 7

使用mb_substr.首先arg要检查的字符串第二个是起始位置,第三个是lenght,last是编码.

mb_substr ("String", 0, $len, 'utf-8');
Run Code Online (Sandbox Code Playgroud)