2010-06-23 2 views
1

Я хотел бы заменить расположение ссылки (метки привязки) на странице следующим образом.Заменить ссылки Месторасположение (href = '...')

Пример ввода:

text text text <a href='http://test1.com/'> click </a> text text 
other text <a class='links' href="gallery.html" title='Look at the gallery'> Gallery</a> 
more text 

Пример вывода

text text text <a href='http://example.com/p.php?q=http://test1.com/'> click </a> text text 
other text <a class='links' href="http://example.com/p.php?q=gallery.html" title='Look at the gallery'> Gallery</a> 
more text 

Я надеюсь, что у меня есть сделать его ясным. В любом случае я пытаюсь сделать это с помощью PHP и reg-ex. Не могли бы вы зажечь меня.

Спасибо Сади

+6

Некоторые люди, столкнувшись с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них есть две проблемы. – icktoofay

+1

@icktoofay Если вы не Jay-Z с 99 проблемами: P – alex

+1

Если у вас есть лучшее решение, то reg-ex, пожалуйста, поделитесь. Мне нужно решить проблему эффективно. Любые эффективные решения приветствуются. Спасибо – Sadi

ответ

9

Не использовать регулярные выражения для разбора HTML.

Использовать встроенный механизм XML-анализа PHP. Он хорошо работает по вашему вопросу (и отвечает на вопрос к загрузке):

<?php 
    libxml_use_internal_errors(true); // ignore malformed HTML 
    $xml = new DOMDocument(); 
    $xml->loadHTMLFile("http://stackoverflow.com/questions/3099187/replace-links-location-href"); 
    foreach($xml->getElementsByTagName('a') as $link) { 
    $link->setAttribute('href', "http://www.google.com/?q=" . $link->getAttribute('href')); 
    } 
    echo $xml->saveHTML(); // output to browser, save to file, etc. 
+0

Спасибо. Позвольте мне проверить это. Но один из них может быть искажен :(Так что, возможно, мне нужно будет использовать его как libxml_use_internal_errors (false), не так ли? – Sadi

+1

В самом деле, механизм libxml будет исправлять неверно вложенные теги. 'Libxml_use_internal_errors (false)' просто предотвращает PHP-скрипт из заражающего вывода страницы с предупреждениями о плохом HTML. – leepowers

+0

Спасибо +1 за объяснение :) – Sadi

-1

Попробуйте использовать str_replace();

$string = 'your text'; 
    $newstring = str_replace ('href="', 'href="http://example.com/p.php?q=', $string); 
+0

: O !!!! Почему это будет работать: -/ – Sadi

+0

Вы можете это проверить. – pltvs

Смежные вопросы