【メモ】 DOMDocument::loadHTMLで文字化けする場合
HTML文書を読み込んでパースするときに、今までは正規表現でやっていたんですが、 処理がどうしても面倒な感じになるし改変にも弱いので、DOMでやることにしてみたらば見事に嵌るなど。 読み込む文書がXMLだと問題ないんですが、HTML、特にShift-JISで書かれた文書だとなぜか文字化け。 色々と検索した結果、多分これで行けると言うのにたどり着いたのでメモ。
参考
DOM拡張モジュールでHTMLをパースする【PHP】 – Programming Magic文字化けさせないためのポイント
- 読み込む文書をUTF-8に変換しておく
- あらかじめ日本語文字列を数値文字参照に変換しておく
1. 読み込む文書をUTF-8に変換しておく
PHPのデフォルト文字コードに合わせる、と言う意味です。2. あらかじめ日本語文字列を数値文字参照に変換しておく
よく解らなかったんですがこれが文字化けの直接できな原因のようです。 参考エントリでは「metaタグで文字エンコードが指定されていない」場合に起きると書かれていますが、 文字エンコードに「Shift_JIS」が指定されていても発生しました。 というわけで、あらかじめ日本語文字列を数値文字参照に変換しておきます。$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS');
これだと、表示上文字化けは起きません。
それどころか、コメント以外の部分は普通に日本語で書き出されているようです。
ので、このままでもいいかなーという感じ。
まぁとはいえ、あんまりDOMについて解っていないので、だいぶ泥縄であれこれやってるんですけどね…
サーバの全面引っ越し(およびドメインの変更)はいつになることやら。

Instgramのバージョンが1.8に上がって、「いいね!」する機能がアップデートされてました。
写真の上でダブルタップ(2回連続でタップする)と次のようなハートマークが出て、
「いいね!」することが出来ます。
おおー
「いいね!」ボタンが地味に小さかったので、
これはちょっと便利になった。
(但し、もう一度ダブルタップでいいね!取り消し…は出来ない)
他のアプリケーションでも取り入れて欲しいなー
Tweet ATOKでツイートをダブルタップ→お気に入りに追加とか、
超便利だと思うんだけどな。
スマートフォンはPCに比べてインターフェイスのデザインに幅があって楽しそうね。