Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Изменение атрибутов ссылки
Форумы портала PHP.SU » PHP » Регулярные выражения » Изменение атрибутов ссылки

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

1. Skeptik - 28 Января, 2012 - 19:13:00 - перейти к сообщению
В тексте может присутствовать ссылка такого вида:
Цитата:
<a target="_blank" href="http://www.site.com">SITE</a>

Нужно вытащить то, что выделено оранжевым, для замены, НО с учетом того, что в ссылке могут стоять разные параметры ссылки (target и пр.), причем в разных местах (то есть они могут идти в разной последовательности). После замены должно получиться так:
Цитата:
<a href="http://www.site.com" target="_blank" class="a1">SITE</a>

Я так понимаю, что это должно быть что-то вроде:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $text = preg_replace('/<a href=(.*)>(.*)<\/a>/', '<a href="$1" target="_blank" class="a1">$2</a>', $text);

но регулярное выражение пока составить не получается.
Помогите, пожалуйста!
2. duhon - 29 Января, 2012 - 00:40:43 - перейти к сообщению
попробуй так
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace('/<a href=(\S*)>(.*?)<\/a>/', '<a href=$1 target="_blank" class="a1">$2</a>', $text);
3. Skeptik - 29 Января, 2012 - 09:17:09 - перейти к сообщению
Спасибо за отклик! Улыбка Дело в том, что между "<a" и "href" могут стоять атрибуты ссылки - например, "target" или "alt", и между "href="(.*)"" и ">" тоже могут быть атрибуты, так что это тоже нужно учесть каким-то образом.
(Добавление)
Вообще, у меня проблема с поиском символов "<" и ">" - почему-то эти символы у меня ни через str_replace, ни через preg_replace никак не находятся. Огорчение
4. duhon - 29 Января, 2012 - 13:30:20 - перейти к сообщению
тогда походу проще воспользваться PHP Simple HTML DOM Parser или аналогами в парсенге дум модели.
Например из мануала
PHP:
скопировать код в буфер обмена
  1. $html = file_get_html('http://www.google.com/');
  2. // Find all links
  3. foreach($html->find('a') as $element)
  4.        echo $element->href . '<br>';


Тамже найдешь и замену и любые атрибуты и их значения.
5. Skeptik - 29 Января, 2012 - 14:38:55 - перейти к сообщению
Вариант интересный, но у меня не получается создать DOM-объект из переменной. Если ставлю строку:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $html = str_get_html('<a target="_blank" href="http://www.site.com">SITE</a>');

объект создается, а если пытаюсь вместо строки поставить переменную:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $html = str_get_html($text);

то не работает.
(Добавление)
Разобрался, работает. Действительно классная штука для обработки html. Спасибо! Улыбка
6. LIME - 29 Января, 2012 - 15:11:44 - перейти к сообщению
не понял
надо оставить все как есть в определенных ссылках только добавить атрибут class="a1" ?
7. Skeptik - 29 Января, 2012 - 15:13:39 - перейти к сообщению
LIME, да.

 

Powered by ExBB FM 1.0 RC1