php - 在 PHP 中剪切 UTF8 文本

标签 php unicode utf-8 substring truncate

我从数据库中获取 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现在一切正常...

最佳答案

使用 mb_substr。第一个参数是要检查的字符串,第二个是起始位置,第三个是长度,最后是编码。

mb_substr ("String", 0, $len, 'utf-8');

关于php - 在 PHP 中剪切 UTF8 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294537/

相关文章:

php - 将表单字段设置为有条件只读 (PHP)

php - 如何在不立即上线的情况下对 wordpress 进行更改?

php - 如何知道客户端的Magento配置

macos - emacsclient 中的非拉丁语输入

c# - 为什么不是 `Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(x))==x`

php - 编译过时的 PHP 会产生带有 OpenSSL 函数的核心转储。 OpenSSL 版本不匹配?

java - 如何通过 Java 从 MS Access 2007 数据库中读取 Unicode 字符?

c++ - 无法将非英文文本打印到控制台窗口

c++ - 为什么这被认为是常数?

python - 使用 Flask 的 jsonify 将 é 显示为 é