2017-01-23 10 views
1

いくつかのノードを追加するためにPHPでいくつかのhtmlを解析しようとしていますが、DOMDocument-> saveHTMLの出力が期待通りに機能しませんコード化される。ここDOMDocument-> saveHTMLがhref属性で期待通りに機能しない

$html = "<a href='javascript:console.log(\"klk\");'>click here</a>"; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
echo $html . "\n"; 
echo "-----------------\n"; 
echo $doc->saveHTML($doc->getElementsByTagName('a')[0]) . "\n"; 

そして、出力されています:あなたが何かを見ることができるように

<a href='javascript:console.log("klk");'>click here</a> 
----------------- 
<a href="javascript:console.log(%22klk%22);">click here</a> 

がHREF属性と間違って行く

これは間違った出力をチェックするために簡単なコードです。

どうすればこの問題を解決できますか?

テスト/プレイURL:http://ideone.com/TsDhI3

答えて

2

は、二重引用符で区切られた属性の値ではなく、単一のもので、正しい形式でHTMLを書いてみなので、彼らはエンコードされません。 Javascriptは、単一引用符で区切られた文字列を認識します。

ここでは例です:

$html = '<a href="javascript:console.log(\'klk\');">click here</a>'; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
echo $html . "\n"; 
echo "-----------------\n"; 
echo $doc->saveHTML($doc->getElementsByTagName('a')[0]) . "\n"; 

ここで作業バージョンです - http://ideone.com/DjEyUX

+0

これは一例であるが、問題は、HTMLのソースのロットから来て、私はどのようにHTML保証できないということです... – xabi

+1

正しいHTMLのためにDOMDocument()機能が構築されています。あなたのアプリが歪んだHTMLを出力するコントロールされていないソースから入力を受け取った場合、それを供給する前にユーティリティを使ってクリーンアップする必要があります。このライブラリはhttp://htmlpurifier.org/docsまたはhttp://php.netです/manual/ja/book.tidy.php – motanelu

関連する問題