PHP:Проблема с разметкой HTML при отображении обрезанных разметок HTML
Вопрос
Я использую элемент управления Richtext Box, чтобы разместить некоторые данные на одной странице.и я сохраняю данные в своей таблице БД с разметкой HTML. Пример:Это <b>мой жирный </b> текст
Я показываю первые 50 символов этого столбца на другой странице.Теперь, когда я сохраняю, если я сохраняю предложение (с более чем 50 символами) с примененным жирным тегом, а на другой странице, когда я обрезаю это (для взятия первых 50 символов), я потеряю закрывающий тег b (</b> ). Итак, жирный шрифт применяется к остальному содержимому на этой странице.
Как я могу это решить?Как я могу проверить, какие все открытые теги не закрыты?есть ли простой способ сделать это в PHP.Есть ли какая-либо функция, позволяющая удалить все мои HTML-теги/разметку и предоставить мне предложение в виде обычного текста?
Решение
функция Strip_tags удалит все имеющиеся у вас теги.
Другие советы
Да
$textWithoutTags = strip_tags($html);
Я обычно использую HTML::Усечь для этого.Конечно, будучи модулем Perl, вы не сможете использовать его непосредственно в своем PHP, но исходный код демонстрирует рабочий подход (то есть использование парсера HTML).
Альтернативный подход может состоять в том, чтобы усечь, как вы делаете сейчас, а затем попытаться исправить это, используя Аккуратный.
Если вы хотите, чтобы теги HTML оставались, но были правильно закрыты, см. PHP:Обрезать HTML, игнорируя теги.В противном случае читайте дальше:
Strip_tags удалит HTML-теги, но не объекты HTML (например, &
), что может вызвать проблемы в случае усечения.
Для обработки сущностей также можно использовать html_entity_decode декодировать объекты после удаления тегов, затем обрезать и, наконец, перекодировать объекты с помощью htmlспециальные символы:
$text = "1 < 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.