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

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

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

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


person Shyju    schedule 29.04.2009    source источник


Ответы (4)


http://php.net/strip_tags

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

person scragar    schedule 29.04.2009

да

$textWithoutTags = strip_tags($html);
person alex    schedule 29.04.2009

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

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

person Quentin    schedule 29.04.2009

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

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

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

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

person Søren Løvborg    schedule 08.10.2010