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;

または、サードパーティのライブラリを使用できる場合は、SmartDOMDocumetを使用できます。saveHTMLExact()代わりに関数を呼び出すだけです。

于 2012-06-23T17:29:13.160 に答える