2
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($content);
$divs = $dom->getElementsByTagName("div");
foreach ( $divs as $div ) {
    if ( $class = $div->attributes->getNamedItem("class") ) {
        if ( $class->nodeValue == "simplegalleryholder" ) 
            $div->parentNode->removeChild( $div );
    }
}
$content = $dom->saveHTML();

この単純なコードは、削除に役立つはずです

<div class="simplegalleryholder"> .... </div> 

ドキュメントから。唯一の問題は、$content に utf8 でエンコードされた特殊文字 (ąęść など) が含まれていることです。これらはプロセスによって破棄されます (代わりに iÄ™ Å‚ ż を取得します)。

正しい結果を得るには、この問題にどのようにアプローチすればよいですか?

4

1 に答える 1

6

コンストラクターで指定UTF-8しても、基になる xml 処理ライブラリーは utf8 として処理しません。次の回避策は本当にハックですが、かなりうまく機能します。

$encodingHint = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$dom->loadHTML($encodingHint . $html);

https://bugs.php.net/bug.php?id=32547

Web ブラウザーで出力を表示している場合は、http-equiv メタ タグではなく、実際の http ヘッダーを送信します。これは閲覧専用です。domdocument での処理には特にメタ タグが必要です。

header('content-type: text/html; charset=utf-8');
于 2012-05-18T20:47:15.580 に答える