Php 如何截断从MySQL数据库获取的文本并附加省略号?

Php 如何截断从MySQL数据库获取的文本并附加省略号?,php,mysql,Php,Mysql,我试图截断通过mysql\u fetch\u array获取的文本,但由于某些原因,strlen无法正确计算。我的代码如下: while($row = mysql_fetch_array($result)) { $text = $row['text']; $moretext = $row['moretext']; if (strlen($text) > 210 || strlen($moretext) > 210) {

我试图截断通过
mysql\u fetch\u array
获取的文本,但由于某些原因,
strlen
无法正确计算。我的代码如下:

 while($row = mysql_fetch_array($result)) {
        $text = $row['text'];
        $moretext = $row['moretext'];
            if (strlen($text) > 210 || strlen($moretext) > 210) {
               $text = substr($text, 0, 210)."...";
               $moretext = substr($moretext, 0, 210)."...";
             }
    }

如何使其工作,以便它计算文本长度,并在超过指定数量时添加省略号,在本例中为210个字符。

注意,您正在测试$text的长度或$moretext的长度,如果其中一个长度大于210,省略号将被附加到两个。假设这不是期望的行为,您需要将其分为两个if语句。

注意,您正在测试$text的长度或$moretext的长度,如果其中任何一个长度大于210,省略号将被附加到两者中。假设这不是所需的行为,您需要将其分为两个if语句。

使用以下命令:

$text = $row['text'];
$moretext = $row['moretext'];

$text = strlen($text) <= 210 ? $text : substr($text, 0, 210) . "...";
$moretext = strlen($moretext) <= 210 ? $moretext : substr($moretext, 0, 210) . "...";
$text=$row['text'];
$moretext=$row['moretext'];
$text=strlen($text)使用以下命令:

$text = $row['text'];
$moretext = $row['moretext'];

$text = strlen($text) <= 210 ? $text : substr($text, 0, 210) . "...";
$moretext = strlen($moretext) <= 210 ? $moretext : substr($moretext, 0, 210) . "...";
$text=$row['text'];
$moretext=$row['moretext'];

$text=strlen($text)也许您应该让MySQL为您执行截断

你可以用

这样,当您执行
mysql\u fetch\u array
时,该字段已经为您设置好了


试试看

也许你应该让MySQL为你做截断

你可以用

这样,当您执行
mysql\u fetch\u array
时,该字段已经为您设置好了


试试看

你得到了什么结果,使你相信斯特伦无法正确计算?另外,mysql表的“text”和“moretext”列的格式是什么?@GabrielRoth它只是纯UTF8文本。我不确定strlen的计算是否正确,因为它添加了省略号,即使文本低于指定的数量。最大的问题是,如果只有20个字符,但文本包含问号,它会自动添加省略号。您见过php的多字节strlen函数吗?您得到了什么结果,使您相信strlen无法正确计算?另外,mysql表的“text”和“moretext”列的格式是什么?@GabrielRoth它只是纯UTF8文本。我不确定strlen的计算是否正确,因为它添加了省略号,即使文本低于指定的数量。最大的问题是,如果只有20个字符,但文本包含问号,它会自动添加省略号。您见过php的多字节strlen函数吗?
select
    IF(LENGTH(moretext) > 210,CONCAT(SUBSTR(moretext,1,210),'...'),moretext) moretext
from mip where active = 1;