Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Удаление атрибутов у тегов

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: vasiatka   (18.02.2014 в 21:23)   письмо автору
 
   для: tima2010   (17.03.2012 в 16:57)
 

Проблема очистки html актуальна и сейчас.
Вот например статья HtmlCleaner про очистку html от ненужных тегов и атрибутов тегов.
В статье описан класс для решения вашей задачи. Делает то же самое.
Но не использует регулярных выражений для выделения атрибутов тегов.
Для удаления атрибутов использован DOMDocument. Кроме того, есть возможность удалять JavaScript из атрибутов href.
Очень гибкая настройка работы класса.

  Ответить  
 
 автор: ladan   (21.03.2012 в 17:28)   письмо автору
 
   для: tima2010   (21.03.2012 в 11:36)
 

да не, все в норме )

  Ответить  
 
 автор: tima2010   (21.03.2012 в 11:36)   письмо автору
 
   для: ladan   (21.03.2012 в 11:18)
 

Что то не так с рег. выражением?

  Ответить  
 
 автор: ladan   (21.03.2012 в 11:18)   письмо автору
 
   для: Sfinks   (20.03.2012 в 23:00)
 

ну тогда почаще бэкапы делать :)

  Ответить  
 
 автор: tima2010   (21.03.2012 в 11:02)   письмо автору
 
   для: Гость   (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);
?>

  Ответить  
 
 автор: Гость   (21.03.2012 в 10:33)   письмо автору
 
   для: tima2010   (17.03.2012 в 16:57)
 

Разбейте задачу на подзадачи:
1. Находим все теги.
2. Удаляем не разрешенные теги.
3. Для каждого тега находим все атрибуты
4. Удаляем не разрешенные атрибуты, для не левых - проверяем корректность заполнения, если что-то не так - вырезаем и их.

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

PS: присмотритесь к функции "preg_replace_callback"

  Ответить  
 
 автор: tima2010   (21.03.2012 в 10:04)   письмо автору
 
   для: Sfinks   (21.03.2012 в 09:46)
 

Большое спасибо

  Ответить  
 
 автор: 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]+

  Ответить  
 
 автор: tima2010   (21.03.2012 в 09:00)   письмо автору
 
   для: 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]';
и прочей дребедени

а найти толковый валидатор ссылок не получается...

  Ответить  
 
 автор: tima2010   (21.03.2012 в 08:17)   письмо автору
 
   для: Sfinks   (20.03.2012 в 23:53)
 

спасибо!
Странно работает и с U и с u

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования