0

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

以下基本上是有效的,但是令我沮丧的是,它在修改后的 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); 
4

1 回答 1

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;

或者,如果您可以使用一些 3rd 方库,您可以使用SmartDOMDocumet。只需调用该函数saveHTMLExact()即可。

于 2012-06-23T17:29:13.160 回答