PHP: Проблем с HTML маркирането при показване на съкратени HTML маркировки

Използвам контрола на кутия с богат текст, за да публикувам някои данни на една страница. и записвам данните в моята db таблица с 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