PHP:Проблема с разметкой HTML при отображении обрезанных разметок HTML

StackOverflow https://stackoverflow.com/questions/801017

  •  03-07-2019
  •  | 
  •  

Вопрос

Я использую элемент управления Richtext Box, чтобы разместить некоторые данные на одной странице.и я сохраняю данные в своей таблице БД с разметкой HTML. Пример:Это <b>мой жирный </b> текст

Я показываю первые 50 символов этого столбца на другой странице.Теперь, когда я сохраняю, если я сохраняю предложение (с более чем 50 символами) с примененным жирным тегом, а на другой странице, когда я обрезаю это (для взятия первых 50 символов), я потеряю закрывающий тег b (</b> ). Итак, жирный шрифт применяется к остальному содержимому на этой странице.

Как я могу это решить?Как я могу проверить, какие все открытые теги не закрыты?есть ли простой способ сделать это в PHP.Есть ли какая-либо функция, позволяющая удалить все мои HTML-теги/разметку и предоставить мне предложение в виде обычного текста?

Это было полезно?

Решение

http://php.net/strip_tags

функция Strip_tags удалит все имеющиеся у вас теги.

Другие советы

Да

$textWithoutTags = strip_tags($html);

Я обычно использую HTML::Усечь для этого.Конечно, будучи модулем Perl, вы не сможете использовать его непосредственно в своем PHP, но исходный код демонстрирует рабочий подход (то есть использование парсера HTML).

Альтернативный подход может состоять в том, чтобы усечь, как вы делаете сейчас, а затем попытаться исправить это, используя Аккуратный.

Если вы хотите, чтобы теги HTML оставались, но были правильно закрыты, см. PHP:Обрезать HTML, игнорируя теги.В противном случае читайте дальше:

Strip_tags удалит HTML-теги, но не объекты HTML (например, &amp;), что может вызвать проблемы в случае усечения.

Для обработки сущностей также можно использовать html_entity_decode декодировать объекты после удаления тегов, затем обрезать и, наконец, перекодировать объекты с помощью htmlспециальные символы:

$text = "1 &lt; 2\n";
print $text;
print htmlspecialchars(substr(html_entity_decode(strip_tags($text), ENT_QUOTES), 0, 3));

(Обратите внимание на использование ENT_QUOTES для фактического преобразования все сущности.)

Результат:

1 < 2
1 <

Сноска: Вышеупомянутое работает только для объектов, которые можно декодировать в ISO-8859-1.Если вам нужна поддержка международных символов, вы уже должны работать со строками в кодировке UTF-8, и вам просто нужно указать это в вызове html_entity_decode.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top