0

我需要<a>用 php 文件中的一些文本替换所有 href。我用过

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

但这会用相同的文本替换所有链接。我需要为每个链接提供不同的文本。如何实现这一点。也可以完全获取href链接,这意味着如果我有一个包含链接的文件<a href="www.google.com">Google</a>,我该如何提取字符串'<a href="www.google.com">Google</a>'

请帮我。

4

2 回答 2

1

好的,因为没有关于如何以这种方式操作 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>

只需从阅读手册开始,然后单击查看我在此处使用的所有方法(和相关类)DOMDocumentDOMDocument API,就像客户端 JS 中的 DOM API 一样,体积庞大,并不那么直观,但这就是它的样子……
呼应实际的 html,没有 doctype 可以使用该saveXML方法完成,和/或一些字符串操作......总而言之,使用此代码作为基础以及提供的链接,到达您想要的位置应该不会太难。

于 2013-08-23T08:47:39.963 回答
1

使用 DOMDocument。

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
    //Do your processing here
}
于 2013-08-23T08:41:18.423 回答