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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Изменение атрибутов ссылки

 PHP.SU

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


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

> Без описания
Skeptik
Отправлено: 28 Января, 2012 - 19:13:00
Post Id


Новичок


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


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




В тексте может присутствовать ссылка такого вида:
Цитата:
<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);

но регулярное выражение пока составить не получается.
Помогите, пожалуйста!
 
 Top
duhon
Отправлено: 29 Января, 2012 - 00:40:43
Post Id



Гость


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


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




попробуй так
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace('/<a href=(\S*)>(.*?)<\/a>/', '<a href=$1 target="_blank" class="a1">$2</a>', $text);
 
 Top
Skeptik
Отправлено: 29 Января, 2012 - 09:17:09
Post Id


Новичок


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


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




Спасибо за отклик! Улыбка Дело в том, что между "<a" и "href" могут стоять атрибуты ссылки - например, "target" или "alt", и между "href="(.*)"" и ">" тоже могут быть атрибуты, так что это тоже нужно учесть каким-то образом.
(Добавление)
Вообще, у меня проблема с поиском символов "<" и ">" - почему-то эти символы у меня ни через str_replace, ни через preg_replace никак не находятся. Огорчение
 
 Top
duhon
Отправлено: 29 Января, 2012 - 13:30:20
Post Id



Гость


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


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




тогда походу проще воспользваться 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>';


Тамже найдешь и замену и любые атрибуты и их значения.
 
 Top
Skeptik
Отправлено: 29 Января, 2012 - 14:38:55
Post Id


Новичок


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


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




Вариант интересный, но у меня не получается создать 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. Спасибо! Улыбка

(Отредактировано автором: 29 Января, 2012 - 15:06:06)

 
 Top
LIME
Отправлено: 29 Января, 2012 - 15:11:44
Post Id


Активный участник


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


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




не понял
надо оставить все как есть в определенных ссылках только добавить атрибут class="a1" ?
 
 Top
Skeptik
Отправлено: 29 Января, 2012 - 15:13:39
Post Id


Новичок


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


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




LIME, да.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB