2013-08-23 4 views
0

Мне нужно заменить все <a> hrefs на некоторый текст в php-файле. Я использовалКак заменить ссылки href в php

preg_replace('#\s?<a.*/a>#', 'text', $string); 

Но это заменяет все ссылки того же текста. Мне нужны разные тексты для каждой ссылки. Как это достичь. Также возможно получить ссылку href полностью, значит, если у меня есть файл, содержащий ссылку <a href="www.google.com">Google</a>, как я могу извлечь строку '<a href="www.google.com">Google</a>'.

Пожалуйста, помогите мне.

+2

Просто проанализируйте DOM уже ... –

+0

Использование http://php.net/domdocument - Все остальное дерьмо, действительно. Если у вас есть несколько статических ссылок, которые вы хотите заменить, используйте strireplace. Если сложнее, проанализируйте DOM. – DanFromGermany

ответ

1

Использование DOMDocument.

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('a') as $node) { 
    //Do your processing here 
} 
0

ОК, так как нет четкого ответа о том, как манипулировать DOM в пути, я думаю, вы хотите, чтобы манипулировать им:

$foo = '<body><p> Some BS and <a href="https://www.google.com"> Link!</a></p></body>'; 
$dom = new DOMDocument; 
$dom->loadHTML($foo);//parse the DOM here 
$links = $dom->getElementsByTagName('a');//get all links 
foreach($links as $link) 
{//$links is DOMNodeList instance, $link is DOMNode instance 
    $replaceText = $link->nodeValue.': '.$link->getAttribute('href');//inner text: href attribute 
    $replaceNode = $dom->createTextNode($replaceText);//create a DOMText instance 
    $link->parentNode->replaceChild($replaceNode, $link);//replace the link with the DOMText instance 
} 
echo $dom->saveHTML();//echo the HTML after edits... 

Это тушит:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><p> Some BS and Link!: https://www.google.com</p></body></html> 

Просто запустите, прочитав руководство the DOMDocument и перейдите ко всем методам (и связанным с ними классам), которые я использую здесь. API DOMDocument, такой как DOM API на стороне клиента JS, громоздкий и не очень интуитивно понятный, но это как раз то, что он ...
Повторение эхо-файла без использования doctype может быть выполнено с использованием метода saveXML и/или some string operations ... в целом, не должно быть слишком сложно добраться туда, где вы хотите, используя этот код в качестве основы и предоставленные ссылки.

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