用#server端替换链接URL

时间:2012-06-23 17:00:26

标签: php

我希望用一个数字符号(#)替换某些HTML中的所有链接网址。

以下内容基本上有效,但令我沮丧的是,在修改过的HTML周围插入<!DOCTYPE><html><body>标记。是否可以防止插入这些标签?有更好的方法吗?

谢谢

$html_with_urls = '<p>hello.  Here is a <a href="http://somesite.com">link</a>.  Goodby</p>';
libxml_use_internal_errors(true); //Temorarily disable errors resulting from improperly formed HTML
$doc = new DOMDocument();
$doc->loadHTML($html_with_urls);
$a = $doc->getElementsByTagName('a');
foreach ($a as $link) {
    if ($link->hasAttribute('href')) {
        $link->setAttribute('href', '#');
    }
}
$html_without_urls = $doc->saveHTML();
libxml_use_internal_errors(false);
echo($html_with_urls . '<br />' . $html_without_urls); 

1 个答案:

答案 0 :(得分:0)

在我看来,DOMDocument类没有选择阻止它添加额外的东西。它返回一个完整且有效的HTML。

对于您的特定情况,您可以自己从文档中删除这些内容: [从代码中你可以告诉它什么时候不起作用:)]

$html_without_urls = str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $html_without_urls);
$html_without_urls = preg_replace('/^<!DOCTYPE.+?>/i', '', $html_without_urls);
echo $html_without_urls;

或者,如果您可以使用某些第三方库,则可以使用SmartDOMDocumet。只需调用函数saveHTMLExact()即可。