文字コード指定して無いサイトは爆発しろ

例え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();


なんて落とし穴