【问题标题】:How to truncate an UTF8 string in PHP?如何在 PHP 中截断 UTF8 字符串?
【发布时间】:2012-01-19 00:40:34
【问题描述】:

我的 PHP 代码中有一些字符串如果太长需要截断。

例如,如果一个文本是这样的:

嗨,我想告诉你这是多么美妙。

它会用这个代替它:

你好,我想...

为此,我做了一个简单的substr。问题在于,在 UTF8 中,某些字符实际上是两个字符长。而且我遇到了一些字符在中间被剪切的问题:例如,当我尝试将修改后的字符串插入数据库时​​,它会崩溃。

这是我目前的功能:

static function short($string, $max = 255){
   if(strlen($string) >= $max){
       $string = substr($string, 0, $max - 5).'...';
   } return $string;
}

有人知道如何使这个函数即使对 UTF8 字符也能工作?

【问题讨论】:

标签: php string utf-8 truncate


【解决方案1】:

试试mb_substr()

static function short($string, $max = 255){
   if(mb_strlen($string, 'utf-8') >= $max){
       $string = mb_substr($string, 0, $max - 5, 'utf-8').'...';
   } return $string;
}

【讨论】:

  • @deceze - 你是对的,谢谢指出这一点 - 我更正了复制/粘贴的代码
【解决方案2】:

你需要的就是 mb_strimwidth() : http://php.net/manual/en/function.mb-strimwidth.php

例子:

mb_strimwidth('Hi, I would like to tell you how wonderful this is.',0,15,'...','utf-8');

【讨论】:

  • @trejder 不,不是。 本文的初始版本声称 mb_strimwidth() 在 PHP 7.2 中已被弃用,并且该弃用是所描述问题的根源。事实证明,mb_strimwidth()(当然!)在 PHP 7.2 中没有被弃用。
  • @ÁlvaroGonzález 正确!我正在删除我的评论。谢谢!
猜你喜欢
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多