Преобразование eregi_replace в preg_replace - PullRequest
0 голосов
/ 30 ноября 2009

Я пытаюсь разобрать некоторые фрагменты HTML и хочу очистить их по разным причинам (XSS и др.).

В настоящее время я пытаюсь удалить все атрибуты любого тега, кроме href на привязке. Я делаю это, используя последовательность вызовов eregi_replace, но я уверен, что есть более разумный способ сделать это, используя preg_replace и всего несколько строк кода, но я не смог заставить его работать. Кто-нибудь может помочь?

Текущий код:

$data_item = eregi_replace("<p[^>]*>","<p>", $data_item);
$data_item = eregi_replace("<h2[^>]*>","<h2>", $data_item);
$data_item = eregi_replace("<h3[^>]*>","<h3>", $data_item);
$data_item = eregi_replace("<h4[^>]*>","<h4>", $data_item);
$data_item = eregi_replace("<h5[^>]*>","<h5>", $data_item);
$data_item = eregi_replace("<h6[^>]*>","<h6>", $data_item);
$data_item = eregi_replace("<ul[^>]*>","<ul>", $data_item);
$data_item = eregi_replace("<ol[^>]*>","<ol>", $data_item);
$data_item = eregi_replace("<li[^>]*>","<li>", $data_item);

$data_item = preg_replace("/<a([^>]*)( href=\S+)([^>]*)>/i", '<a$2 rel="nofollow">', $data_item);

(мне нужно только проанализировать подмножество тегов HTML, так как до этого я удаляю все нежелательные).

1 Ответ

3 голосов
/ 30 ноября 2009

Почему бы не использовать общее регулярное выражение, которое будет соответствовать любому тегу, а затем preg_replace_callback(), чтобы позволить вам определить, на какой данный тег следует заменить? Таким образом, вы можете иметь простую функцию, которая проверяет, был ли совпадающий тег тегом a, и если да, то не заменяет href, а в противном случае заменяет все.

В качестве альтернативы, вы можете сделать что-то вроде этого:

$data_item = preg_replace("/<(p|h2|h3|h4|h5|h6|ul|ol)[^>]*>/i","<$1>", $dataitem);

Если группа () в регулярном выражении фиксирует тип сопоставляемого тега, | - это оператор "или", соответствующий любому из указанных тегов, а $1 в тексте замены используется для замены в том, что соответствовало первой (и единственной) группе захвата из шаблона.

...