<a href="http://abc.com">Title</a>
和:
<a href="http://xyz.com">Title</a>
我想替换链接到文本 “标题”,但只能从http://abc.com。但我不知道(我试过谷歌),你能为我解释一下吗?我不擅长PHP。
在此先感谢。
<a href="http://abc.com">Title</a>
和:
<a href="http://xyz.com">Title</a>
我想替换链接到文本 “标题”,但只能从http://abc.com。但我不知道(我试过谷歌),你能为我解释一下吗?我不擅长PHP。
在此先感谢。
不知道我真的明白你问什么,但如果你:
然后,很好地解决(比正则表达式好,我应该说!)将使用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作为案例。 请注意:我写的正则表达式仓促,我很新手。请检查它是否适合您的所有预期情况。
谢谢你,它的工作原理。但是当我使用Magpie RSS通过RSS feed解析内容时,我想要替换的链接通常是动态的。我的意思是在标签的RSS链接像http://abc.com/tag/tag1,http://abc.com/tag/tag2 ....我可以用文本替换所有这些链接? –
nuphero
2010-04-25 07:35:00