私はPhpのDOMDocumentを使って文字列のアンカーのhref属性を置き換える関数を持っています。ここでは、スニペットです:PHPのDOMDocumentがhtmlエンティティをエンコードするのを防ぐにはどうすればいいですか?
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($text);
$anchors = $doc->getElementsByTagName('a');
foreach($anchors as $a) {
$a->setAttribute('href', 'http://google.com');
}
return $doc->saveHTML();
問題がloadHTML($テキスト)が$のDOCTYPE内のテキスト、HTML、ボディなどのタグを取り囲んでいることです。私はloadHTML()の代わりにこれを行うことでこれを回避しようとしました:残念ながら、これはすべてのエンティティ(アンカーが含まれています)をエンコードします。誰もこれをオフにする方法を知っていますか?私はすでにドキュメントを徹底的に見てハックしようとしましたが、それを理解することはできません。
ありがとうございます! :)
loadHTML、エンティティの変換は行われません。私は、mb_substr($ text、122、-19)を実行することで、問題をハッキングしてしまいました。 $ doc-> saveHTML()の結果に基づいています。 Yikes! :) $ textはプレースホルダのアンカータグで翻訳された文字列なので、置換は実行時に行う必要があります。翻訳されたリンクだけを解析するのは難しいので、私はむしろ文書全体を解析しません。 いい考えです。 – thesmart