|
|
|
|
|
для: tima2010
(17.03.2012 в 16:57)
| | Проблема очистки html актуальна и сейчас.
Вот например статья HtmlCleaner про очистку html от ненужных тегов и атрибутов тегов.
В статье описан класс для решения вашей задачи. Делает то же самое.
Но не использует регулярных выражений для выделения атрибутов тегов.
Для удаления атрибутов использован DOMDocument. Кроме того, есть возможность удалять JavaScript из атрибутов href.
Очень гибкая настройка работы класса. | |
|
|
|
|
|
|
|
для: tima2010
(21.03.2012 в 11:36)
| | да не, все в норме ) | |
|
|
|
|
|
|
|
для: ladan
(21.03.2012 в 11:18)
| | Что то не так с рег. выражением? | |
|
|
|
|
|
|
|
для: Sfinks
(20.03.2012 в 23:00)
| | ну тогда почаще бэкапы делать :) | |
|
|
|
|
|
|
|
для: Гость
(21.03.2012 в 10:33)
| | Так почти и получилось:
<?php
/* Вырезаем все теги кроме разрешенных */
$text = strip_tags($text, '<b><strong><i><u><del><strike><em><center><h2><li><ol><ul><br><hr><center>');
/* Вырезаем все атрибуты */
$text = preg_replace('/<([a-z][a-z0-9]*)[^>]*?(\/?)>/i','<$1$2>', $text);
/* BBCode для ссылки вида [ url ]ссылка[/ url] */
$text = preg_replace("#\[url\][\s]*(http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?)[\s]*\[\/url\]#isu",'<a href="\\1" target="_blank">\\1</a>',$text);
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(17.03.2012 в 16:57)
| | Разбейте задачу на подзадачи:
1. Находим все теги.
2. Удаляем не разрешенные теги.
3. Для каждого тега находим все атрибуты
4. Удаляем не разрешенные атрибуты, для не левых - проверяем корректность заполнения, если что-то не так - вырезаем и их.
Обратите внимание - лучше всего по умолчанию запретить все теги/атрибуты, а уже потом разрешить только необходимые - это гораздо проще чем перечислять все теги/атрибуты, которые мы хотим запретить и при этом забыть про пару-другую, через которые в итоге и поломают :)
PS: присмотритесь к функции "preg_replace_callback" | |
|
|
|
|
|
|
|
для: Sfinks
(21.03.2012 в 09:46)
| | Большое спасибо | |
|
|
|
|
|
|
|
для: tima2010
(21.03.2012 в 09:00)
| | Это делается через preg_replace_callback() функцию.
Но лучше нате вам толковый валидатор:
<?
$pattern = "#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui";
| берете все что между ## и вставляете вместо [\S]+ | |
|
|
|
|
|
|
|
для: Sfinks
(20.03.2012 в 23:53)
| | Хотел еще поинтересоваться, можно ли как то применить htmlspecialchars к данным которые мы выдергиваем из [ ulr ]http://softtime.ru/forum/pstadd.php?id_forum=6[/ url]
именно к самой ссылке ?
Есть вариант:
<?php
$text = '[ url]http://softtime.ru/forum/pstadd.php?id_forum=6[/ url]';
$url = preg_replace("#\[mp3\][\s]*([\S]+)[\s]*\[\/mp3\]#isU",'\\1',$text);
$url = htmlspecialchars($url);
/* Но теперь на место ссылку не поставить... */
?>
|
но ссылку не выйдет на место поставить.
Получается нужно сделать что то типа:
$url= preg_replace("#\[url\][\s]*([\S]+)[\s]*\[\/url\]#isu",'<a href="htmlspecialchars(\\1)" target="_blank">\\1</a>',$text);
|
Применять htmlspecialchars задумал чтобы избежать заместо ссылок вставки javascript коды к примеру
$text = '[url]"onclick="alert(123);"[/url]';
| и прочей дребедени
а найти толковый валидатор ссылок не получается... | |
|
|
|
|
|
|
|
для: Sfinks
(20.03.2012 в 23:53)
| | спасибо!
Странно работает и с U и с u | |
|
|
|
|