htmlentities и html_entity_decode не ведут себя как обратные

Я хотел бы обрезать строку до определенного количества символов. Эта строка содержит HTML-символы. Обратите внимание, что я удалил все html-теги из строки. Теперь, если в точке останова есть специальный символ, он должен прерываться не в середине символа html, а после или до. Эти примеры не работают:

//example 1
$str = "French for French is français";
$str = substr($str, 0, 27);
//$str contains "French for French is fran&c";

//example 2
$str = "the en dash looks like –";
$str = substr($str, 0, 25);
//$str contains "the en dash looks like &#";

Поэтому я решил сначала преобразовать специальные символы в отдельные символы, выполнить усечение, а затем преобразовать отдельные символы в специальные символы. Кажется, работает в первом примере, но не во втором.

//example 1
$str = "French for French is français";
$str = html_entity_decode($str);
$str = substr($str, 0, 27);
$str = htmlentities($str);
//$str contains "French for French is frança";

//example 2
$str = "the en dash looks like –";
$str = html_entity_decode($str);
$str = substr($str, 0, 25);
$str = htmlentities($str);
//$str contains "the en dash looks like &#";

Что я должен изменить, чтобы оба примера вели себя так, как я ожидал?

0

Решение

htmlentities использует ваш default_charset Значение php.ini для его кодировки по умолчанию. Если вы не используете кодировку, которая поддерживает преобразовываемые объекты, она может работать не так, как ожидалось. Попробуйте это и посмотрите, если вы получите другие результаты.

htmlentities($str, null, 'utf-8');

html_entity_decode($str, null, 'utf-8');

mb_substr($str, 0, 25, 'utf-8');

http://php.net/htmlentities

http://php.net/html_entity_decode

http://php.net/manual/en/function.mb-substr.php

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]