PHP: отфильтровывать определенные HTML-теги из заданного текста - PullRequest
1 голос
/ 30 января 2010

Я много гуглил, за такие проблемы много раз задавали в прошлом. Но я не нашел ничего, что соответствовало бы моим потребностям.

У меня есть HTML-форматированный текст из формы. Просто так:

Hey, I am just some kind of <strong>formatted</strong> text!

Теперь я хочу убрать все HTML-теги, которые я не разрешаю. Встроенный в PHP метод strip_tags () делает это очень хорошо.

Но я хочу пойти еще дальше: я хочу разрешить некоторые теги только внутри или не внутри других тегов. Я также хочу определить свои собственные XML-теги.

Другой пример:

I am a custom xml tag: <book><strong>Hello!</strong></book>. Ok... <strong>Hi!</strong>

Теперь я хочу, чтобы <strong/> внутри <book/> был удален, но <strong>Hi!</strong> может оставаться таким, как есть.

Итак, я хочу определить некоторые правила того, что я разрешаю или не разрешаю, и хочу, чтобы любой фильтр делал все остальное.

Есть ли простой способ сделать это? Регулярные выражения - не то, что я ищу, потому что они не могут правильно разобрать html.

С уважением, Ян Оливер

Ответы [ 4 ]

2 голосов
/ 30 января 2010

Не думаю, что есть такая вещь, я думаю, что даже Очиститель HTML не делает этого.

Я предлагаю вам разобрать XHTML вручную, используя что-то вроде Simple HTML Dom .

1 голос
/ 30 января 2010

Используйте второй аргумент для strip_tags, который является допустимым тегом.

$text = strip_tags($text, '<book><myxml:tag>');

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

Кроме того, регулярные выражения не не хороши при разборе HTML, но это медленный по сравнению с параметрами Но это не то, что ты здесь делаешь. Вы проходите через строку и удаляете вещи, которые вам не нужны. А для ваших сложных требований я думаю, что ваш единственный вариант - использовать регулярные выражения.

Честно говоря, я думаю, вы должны решить, какие теги допустимы, а какие нет. Находятся ли они внутри других тегов или нет, не имеет значения вообще. Это разметка, а не скрипт.

0 голосов
/ 31 января 2010

Я написал свой собственный класс Filter, основанный на классах DOM PHP. Смотрите здесь: XHTMLFilter class

0 голосов
/ 30 января 2010

Второй аргумент показывает, что вы можете разрешить некоторые теги:

string strip_tags ( string $str [, string $allowable_tags ] )

с php.net

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