Удалите все HTML-теги и контент, кроме класса div - PullRequest
2 голосов
/ 09 января 2011

Я хочу удалить все html-содержимое из строки, кроме класса div: <div class="toto">blablabla</div>

Должен ли я использовать Regex или DOM Parser?

Для ответа drachenstern:

Это комментарий с bbcode. И HTML в этом div генерируется с помощью Geshi (подсветка кода), поэтому я не хочу удалять это.

Например, посетитель может ввести <script></script> в теге [code][/code] bbcode. Весь HTML вне тега [code][/code] bbcode должен быть удален no?

Ответы [ 5 ]

1 голос
/ 09 января 2011

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * 100 000 *1002*. Некоторые проблемы слишком велики для того, чтобы вы пытались их решать каждый раз, поэтому считается правильным и приемлемым использовать внешнюю библиотеку .

Если вам нужен только один div, я хотел бы знать, что вы пытаетесь сделать с конкретным div. Может ли это работать на стороне клиента или на стороне сервера? Вы пытаетесь написать скребок?

0 голосов
/ 09 января 2011

(я предполагаю из тега PHP, что было бы полезно следующее ...)

strip_tags () делает именно это.Пример кода

<?php
$text = '<p>Test paragraph.</p> <div class="blah">Other text</div>';

echo strip_tags($text, '<div>');
echo "\n";
?>

производит вывод

Test paragraph. <div class="blah">Other text</div>
0 голосов
/ 09 января 2011

wordpress и другие по-прежнему используют kses, и это довольно гибкий фильтр - посмотрите здесь: http://sourceforge.net/projects/kses/

Пример:

$string = kses($string, array('div' => array('valueless' => 'n', value => 'toto')));
0 голосов
/ 09 января 2011

Если вы не можете гарантировать, что этот раздел строки ТОЧНО имеет форму <div class="toto".....</div>, регулярное выражение не может этого сделать.Точно я имею в виду, в основном, никаких других атрибутов до class и никаких других div элементов внутри этого.Регулярные выражения должны обрабатывать заглавные / строчные буквы, пробелы и одинарные / двойные кавычки.

Поскольку вы, вероятно, не можете дать такие гарантии (это будет исключительный случай, если вы можете), вам нужносинтаксический анализатор DOM

Даже если вы выполняете регулярное выражение для этого очень специфического случая, если у вас будут возможные изменения или выполняются аналогичные задачи в другом месте, анализатор DOM быстро станет стоящим.* EDIT - ошибочно классифицированы пробелы, исправлено.

0 голосов
/ 09 января 2011

Я думаю, что вы уже знаете ответ :-)

Серьезно, хотя ... в этом случае это зависит от сложности окружающей строки ... Если она имеет большую дисперсию или фрагмент, который вы хотитесохранить вложено глубоко, тогда dom parser делает сонс .. если окружающее содержимое довольно предсказуемо, тогда может сделать регулярное выражение.Я бы, вероятно, использовал DOM в любом случае, потому что с ним будет легче работать и он будет наиболее надежным.

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