我有一个截断文本的函数,如下所示:
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> "
我在这里错过了什么?
非常感谢, 三联体
最佳答案
在您的数据库适配器配置中添加“选项”:
use Phalcon\Db\Adapter\Pdo\Mysql;
$db = new Mysql(
/* ... */
'options' => [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
]
);
关于截断文本的 PHP mb_substr 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644744/