2016-10-30 2 views
0

Для проекта мне нужно получить содержимое веб-сайта и изменить код HTML. Каждая ссылка на этом веб-сайте должна быть заменена моей собственной. Я использовал str_replace, пока не понял, что ссылки иногда имеют назначенные им классы.preg_replace добавить собственный сайт перед каждой гиперссылкой

Я пробовал функцию preg_replace, чтобы добавить свой собственный сайт перед каждой ссылкой href, которая также находится между <a></a> тегами. Не имеет значения, содержит ли выбранный веб-сайт в $contenthref="" или href=''.

$content = preg_replace('~(<a\b[^>]*\shref=")([^"]*)(")~igs', '\1http://website.com/fetch.php?url=\2\3', $content); 

Это не работает, и я не могу найти ошибку. Он должен вести себя следующим образом:

<a class="link" href="http://google.com">Google</a> 

должен превратиться в

<a class="link" href="http://website.com/fetch.php?url=http://google.com">Google</a> 

Может кто-то помочь мне найти ошибку? Заранее спасибо.

+1

Не используйте регулярное выражение, вы столкнетесь с подобными проблемами, которые вы нашли с 'str_replace'. Используйте синтаксический анализатор. Кроме того, если вы не используете функцию, вам не нужно 'preg_replace_callback',' preg_replace' заменит .... Также не существует модификатора 'g' в PHP. Функции глобальны. – chris85

+0

В заменяющей строке предпочтительнее использовать '$ 1',' $ 2' и т. Д. – Barmar

+1

Возможный дубликат [Как вы анализируете и обрабатываете HTML/XML в PHP?] (Http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) – chris85

ответ

0

Не проверяйте регулярное выражение, которое пропустит . Просто прочитайте каждый документ в дереве DOM (дайте это html5 DOM parser a go) и используйте XPath, чтобы получить все ссылки с атрибутами href и обновить их, а затем сохранить результат.

0

просто использовать simplexml и preg_replace

 <?php 

      $string= '<a class="link" href="http://google.com">Google</a>'; 

      $a = new SimpleXMLElement('<a class="link" href="http://google.com">Google</a>'); 

      $newurl="http://website.com/fetch.php?url=".urlencode($a['href']); 

      $pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/"; 

      $body = preg_replace($pattern,$newurl,$string); 

      echo $body; 


     ?> 

ВЫВОД:

<a class="link" href="http://website.com/fetch.php?url=http%3A%2F%2Fgoogle.com">Google</a> 
Смежные вопросы