截断文本的 PHP mb_substr 问题

标签 php phalcon

我有一个截断文本的函数,如下所示:

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&aacute;&aacute;&aacute.</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/

相关文章:

php - 根据文本输入字段填充省份下拉菜单

php - 在表格行鼠标悬停时显示提交按钮

php - laravel中的默认时间戳(created_at和updated_at)保存到数据库时采用什么格式?

php - Phalcon模型中的表前缀配置

php - 如何从数据库 Phalcon php 检索数据

php - Phalcon:如何将 find() 与 sql 中的 IN() 一起使用?

php - 带 slug 的 Laravel 5.6 Resoure API 路线

php - 双引号嵌套数组不起作用

php - 使用 phalcon 验证类进行不区分大小写的验证

php - 在 Phalcon 中执行查询时出错,但查询在 phpMyAdmin 上有效