【发布时间】:2010-04-24 20:52:37
【问题描述】:
我有:
<a href="http://abc.com">Title</a>
还有:
<a href="http://xyz.com">Title</a>
我想替换文本“标题”的链接,但只能来自http://abc.com。但我不知道怎么做(我试过谷歌),你能为我解释一下。我不擅长 PHP。
提前致谢。
【问题讨论】:
标签: php text replace hyperlink
我有:
<a href="http://abc.com">Title</a>
还有:
<a href="http://xyz.com">Title</a>
我想替换文本“标题”的链接,但只能来自http://abc.com。但我不知道怎么做(我试过谷歌),你能为我解释一下。我不擅长 PHP。
提前致谢。
【问题讨论】:
标签: php text replace hyperlink
不确定我是否真的理解您的要求,但如果您:
然后,一个好的解决方案(比正则表达式更好,我应该说!) 是使用与 DOM 相关的类——尤其是,你可以看看 DOMDocument 类,以及它的loadHTML 方法。
例如,考虑到 HTML 部分是在变量中声明的:
$html = <<<HTML
<p>some text</p>
<a href="http://abc.com">Title</a>
<p>some more text</p>
<a href="http://xyz.com">Title</a>
<p>and some again</p>
HTML;
然后你可以使用这样的东西:
$dom = new DOMDocument();
$dom->loadHTML($html);
$tags = $dom->getElementsByTagName('a');
for ($i = $tags->length - 1 ; $i > -1 ; $i--) {
$tag = $tags->item($i);
if ($tag->getAttribute('href') == 'http://abc.com') {
$replacement = $dom->createTextNode($tag->nodeValue);
$tag->parentNode->replaceChild($replacement, $tag);
}
}
echo $dom->saveHTML();
这将为您提供 HTML 的以下部分,作为输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>some text</p>
Title
<p>some more text</p>
<a href="http://xyz.com">Title</a>
<p>and some again</p>
</body></html>
请注意,整个 <a href="http://abc.com">Title</a> 部分已被其包含的文本替换。
如果您想要一些其他文本,只需在我使用 $tag->nodeValue 的地方使用它,这是要删除的节点的当前内容。
不幸的是,是的,这会生成一个完整的 HTML 文档,包括 doctype 声明、<html> 和 <body> 标签,...
【讨论】:
涵盖另一个解释的案例:
$string = '<a href="http://abc.com">Title</a> <a href="http://xyz.com">Title</a>';
$pattern = '/\<\s?a\shref[\s="\']+([^\'"]+)["\']\>([^\<]+)[^\>]+\>/';
$result = preg_replace_callback($pattern, 'replaceLinkValueSelectively', $string);
function replaceLinkValueSelectively($matches)
{
list($link, $URL, $value) = $matches;
switch ($URL)
{
case 'http://abc.com':
$newValue = 'New Title';
break;
default:
return $link;
}
return str_replace($value, $newValue, $link);
}
echo $result;
输入
<a href="http://abc.com">Title</a> <a href="http://xyz.com">Title</a>
变成
<a href="http://abc.com">New Title</a> <a href="http://xyz.com">Title</a>
$string 是您的输入,$result 是您修改的输入。您可以将更多 URL 定义为案例。 请注意:我匆忙写了那个正则表达式,我是新手。请检查它是否适合您的所有预期情况。
【讨论】: