Можете ли вы помочь с регулярным выражением или функцией для удаления тегов в кодировке HTML? - PullRequest
0 голосов
/ 10 марта 2009

Мне нужно регулярное выражение или функция, которая может удалить теги ENCODED HTML из записи базы данных. У меня есть текст в базе данных, которая хранится (из TinyMCE) в кодированном HTML.

Код имеет «меньше чем»; и «больше чем»; теги закодированы.

Я хотел бы удалить все закодированные теги и HTML и просто оставить только простой текст и пробелы.

Ответы [ 6 ]

4 голосов
/ 10 марта 2009

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

Вместо этого лучше всего использовать подход с двумя остановками, основанный на уже существующих функциях PHP.

Во-первых, давайте превратим закодированные сущности HTML обратно в знаки больше и меньше, чем htmlspecialchars_decode .

$string = htmlspecialchars_decode($string);

Это должно дать нам строку правильного HTML. (Если ваши кавычки все еще закодированы, см. Второй аргумент в связанной документации).

В завершение мы удалим теги HTML с помощью функции PHP strip_tags. Это удалит все и все HTML-теги из источника.

$string = strip_tags($string);

Завернуто в функцию / метод

function decodeAndStripHTML($string){
    return strip_tags(htmlspecialchars_decode($string));
}
1 голос
/ 04 января 2012

Удалить регулярное выражение HTML

В ответ на Alan Storm: я, к сожалению, был тем сотрудником, работавшим полный рабочий день (хаха) для веб-приложения, которое использовало проверку JavaScript.

Вот регулярное выражение JavaScript, которое я написал. Я уверен, что это может быть убрано:

var regex =

/ (& # [0-9] ;) | (& [A-Za-z0-9] ;) | (<[/]? [A-Za-z0-9 = /.:;,!@#$%^&*"'?|_{}\~`()+-]+[/]?>)/g;

Где [d или $ amp; или или] или НИЧЕГО внутри угловых скобок было совпадением, выделено и в конечном итоге удалено для пользователя.

-Следующее примечание: я не верю в мысли для пользователя, но это регулярное выражение было необходимо.

1 голос
/ 10 марта 2009

Вас также может заинтересовать эта библиотека под названием Очиститель HTML .

Говорят, а я цитирую:

HTML Purifier соответствует стандартам Библиотека HTML-фильтров написана на PHP. HTML Purifier не только удалит все вредоносный код (более известный как XSS) с тщательно проверенным, безопасным еще разрешительный белый список, он также будет убедитесь, что ваши документы соответствуют стандартам соответствует, что-то достижимое со всесторонним знанием Технические характеристики W3C. Надоело пользоваться BBCode из-за текущего ландшафта дефектные или небезопасные фильтры HTML? Есть редактор WYSIWYG, но никогда не был в состоянии использовать это? Находясь в поиске высокое качество, соответствие стандартам, компоненты с открытым исходным кодом для этого приложение, которое вы создаете? HTML Очиститель для вас!

1 голос
/ 10 марта 2009

Похоже, вам нужно будет перевести &lt; в < и &gt; в >, а затем использовать HTML-анализатор для извлечения текста (последнее не может / не должно быть сделано с обычным выражения).

0 голосов
/ 10 марта 2009

Я обычно использую это \s*?<.*?>\s*?, чтобы соответствовать всем тегам HTML. Чтобы удалить теги, закодированные для объектов, вы можете использовать \s*?&lt;.*?&gt;\s*?

\ s соответствует пробелу,. (точка) соответствует любому символу, * означает ноль или более вхождений предыдущего символа,? в сочетании с * делает * ленивым (неуклюжим).

В зависимости от языка, который вы используете, вам может потребоваться добавить дополнительные обратные косые черты для работы выражения. Если я не ошибаюсь, PHP нужен второй обратный слеш, как это \\s*?<.*?>\\s*?

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

0 голосов
/ 10 марта 2009

&lt;.*?&gt;

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