文字コード指定して無いサイトは爆発しろ
例えUTF-8で記述されていても、
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
この一行が無いだけで、文字化けの原因になる。
せっかく、テキストノード取ってきて色々やろうとしても文字コード指定が無いだけで文字が化ける。
下のコードはこのままじゃ化けます。<head>の下で文字コード指定すれば正常に表示されます。
<?php $html = <<<EOF <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>test</title> </head> <body> <p>ゆき</p> </body> </html> EOF; $config = array( 'char-encoding' => 'utf8', // 入出力の文字コードはUTF-8 'output-html' => true // 出力はHTML形式 ); $tidy = new tidy(); $tidy->parseString($html, $config, 'utf8'); $tidy->cleanRepair(); $dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadHTML($tidy); $xpath = new DOMXpath($dom); $query = '/html/body//text()[string-length(normalize-space()) > 0]'; $text_nodes = $xpath->query($query); // ごにょごにょ echo $dom->saveHTML();
なんて落とし穴