PHP: проблема HTML-разметки при отображении усеченных HTML-разметок - PullRequest
3 голосов
/ 29 апреля 2009

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

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

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

Ответы [ 4 ]

3 голосов
/ 29 апреля 2009

http://php.net/strip_tags

функция strip_tags удалит все ваши теги.

2 голосов
/ 29 апреля 2009

Да

$textWithoutTags = strip_tags($html);
1 голос
/ 08 октября 2010

Если вы хотите, чтобы теги 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 .

1 голос
/ 29 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...