PHP mb_substr проблемы с усеченным текстом - PullRequest
0 голосов
/ 04 октября 2018

У меня есть функция, которая усекает тексты следующим образом:

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, concittur 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 аккумулятор & ...

$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ááááá.

"

var_dump htmlspecialcharacters:

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> "

Что мне здесь не хватает?

Большое спасибо, Трикс

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

удалось решить проблему.Я немного переписал свою функцию, теперь она в порядке.

public function truncateText($text, $val)
{
    if(mb_strlen($text) > $val){
        $content = mb_substr(html_entity_decode(str_ireplace(['<p>','</p>'],'',$text)), 0, $val) . '...';
        return $content;
    } else {
        return $text;
    }
}

Спасибо за советы и помощь, действительно оцените ее.Трикс

0 голосов
/ 04 октября 2018

В конфигурации вашего адаптера базы данных добавьте «опции»:

use Phalcon\Db\Adapter\Pdo\Mysql;

$db = new Mysql(
     /* ... */
     'options'  => [
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
      ]
   );  
...