PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vanicon
Отправлено: 29 Сентября, 2014 - 20:08:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Нужно получить некоторые атрибуты у iframe и img а также заменить их потом на другой тег.
Для этого отлично подходит preg_replace_callback, но у меня она почему-то заменяет все целиком.
Вот регулярное выражение:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<([img|iframe]+).*(?:src|type)=([\'"])?([^\'"]+)([\'"])?.*>)+/im

Необходимо обработать атрибуты src и type, в конце необязательно заменять закрывающий iframe, так как потом он затрется strip_tags'om
Что не так в регулярке?


-----
Так было, так есть и так будет
 
 Top
vanicon
Отправлено: 30 Сентября, 2014 - 19:52:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Нашел решение, дело было в .*
Получилось следующие
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<([img|iframe]+)[^>]+?(?:src|type)=([\'"])?([^\'"]+)([\'"])?[^>]+?>)+/i

Теперь проблема с закрывающим тегом (нужен только iframe), пробовал вот так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<iframe[^>]+?data-value=([\'"])?([^\'"]+)([\'"])?[^>]*?><\/iframe>)+/i

Но она снова видит 3 iframe как 1, и заменяет сразу 3.
Что не так?

(Отредактировано автором: 30 Сентября, 2014 - 19:52:43)



-----
Так было, так есть и так будет
 
 Top
MiksIr
Отправлено: 30 Сентября, 2014 - 20:15:02
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


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

Лучше сделайте цепочку - сначала найдите /<iframe[^>]*>.*?<\/iframe>/si, а в коллбеке уже проверьте наличие data-value и т.п.


-----
self-banned
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB