【发布时间】:2019-03-09 17:30:02
【问题描述】:
我有一个截断文本的函数,如下所示:
public function truncateText($text, $val)
{
if(strlen($text) > $val){
$content = mb_substr($text, 0, $val) . '...';
return $content;
} else {
return $text;
}
}
我遇到了多字节字符的问题。即使我使用的是 mb_substring,我仍然会在文本末尾收到奇怪的字符。 我的 mb_internal_encoding 是 UTF-8。
一个例子如下:
数据库中存储的字符串是:
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada pretium justo, non posuere enim semper vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam iaculis nulla velit, eget accumááááá.</p>
当我使用 truncateText 运行此字符串时,我会在末尾得到以下内容和 amp 字母:
Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Praesent malesuada pretium justo,non posuere enim semper vel。 Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus。 Aliquam iaculis nulla velit, eget accum&...
$this->tag->truncateText($text, 250);
但是,如果我直接用文本测试它而不从数据库中获取它并且没有
标签然后截断是好的。我尝试了从数据库中获取的字符串中的 strip_tags,但仍然没有。
存储在数据库中的上述字符串的var_dump:
string(925) "
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada pretium justo, non posuere enim semper vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam iaculis nulla velit, eget accumááááá.
"
html特殊字符的var_dump:
string(949) "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada pretium justo, non posuere enim semper vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam iaculis nulla velit, eget accumááá.</p> "
我在这里错过了什么?
非常感谢, 三重奏
【问题讨论】:
-
您可以在从数据库中获取该字符串后立即发布该字符串的 var_dump 吗?在截断之前?
-
听起来你做错了什么,比如在数据库中存储 HTML 实体。
-
使用 var_dump 更新帖子。
-
奇怪的是他的代码在 php-cli 上运行良好,测试它的字符串和函数没有任何问题
-
在浏览器的源代码视图中检查 var_dump 的输出,而不是在浏览器已经将其解释为 HTML 之后。 (或者使用
echo htmlspecialchars($value)来进行调试输出。)