用文本替换特定域的链接(PHP)

时间:2010-04-24 20:52:37

标签: php text replace hyperlink

我有:

<a href="http://abc.com">Title</a>

并且:

<a href="http://xyz.com">Title</a>

我想将链接替换为文字“标题”,但仅限于http://abc.com。但我不知道(我试过谷歌),你能为我解释一下吗?我不擅长PHP。

提前致谢。

2 个答案:

答案 0 :(得分:3)

我不确定我真的明白你在问什么,但如果你:

  • 包含一些包含HTML的字符串
  • 并希望用某些文字
  • 替换所有指向abc.com的链接

然后,一个好的解决方案(比正则表达式更好,我应该说!)将使用与DOM相关的类 - 尤其是,您可以查看{{3} } class,及其DOMDocument方法。


例如,考虑到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>标记,...

答案 1 :(得分:1)

涵盖另一个解释案例:

$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定义为案例。 请注意:我急忙写了那个正则表达式,我是新手。请检查它是否适合您的所有用途。