我希望用一个数字符号(#)替换某些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);
答案 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()
即可。