[PHP-users 35728] Re: DOMDocument なんとかなったようです
Yoshi Saito
yk_mailing @ excite.co.jp
2012年 6月 5日 (火) 00:36:21 JST
ようやく解決できたっぽいです。
皆様、本当にありがとうございました。
もうほんと2週間以上これに悩んでおりました。
後藤様の
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'auto');
でいけました。
ただし、
$meta_before = "<meta charset="Shift_JIS"/>";
$meta_after = "<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">";
str_replace($meta_before, $meta_after, $html);
ではいけませんでした。
これは何がいけなかったのでしょうか?
str_replace()を使ったのがいけなかったのか、<などの文字を<などにしなかったのが悪かったのか良く分かりませんでした。
この<meta>を書き換える方法はどのようにすればいいのでしょうか?
"Yoshi Saito"<yk_mailing @ excite.co.jp> wrote:
> 後藤様
>
> ご回答ありがとうございました。
>
> なるほど!!
> HTML5なのですか。
> 自分、今までHTML5は触った事なくて、今初めてヘッダ部の事を知りました。
> HTML5とか書いてなかったので、全然分かりませんでした。
>
> これはかなり重大な見落としですね。
> 非常に参考になりました。
> ちょっと試してみます。
>
>
>
> <gotou1213 @ gmail.com> wrote:
> > 後藤と申します。
> >
> > DOMDocument::loadHTML は metaタグからHTMLの文字エンコーディングを判断していたと思いますが、
> >
> > http://www.nhk.or.jp/worldwave/abc/popup/abc120423.html
> >
> > ↑の charset が HTML5 な指定になっているため、loadHTML で
> > エンコーディングが解釈できていないからではないでしょうか?
> >
> > 試しにそのページのHTMLをダウンロードして、meta タグの charset の部分を
> > 下記のように書き換えて loadHTML に渡せば上手くいくと思います。
> >
> > <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
> >
> > もしくは loadHTML の直前で
> >
> > $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'auto');
> >
> > などとして、マルチバイト文字を数値文字参照に置き換えてやるとか。
> > _______________________________________________
> > PHP-users mailing list PHP-users @ php.gr.jp
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> >
> Yoshi Saito
> _______________________________________________
> PHP-users mailing list PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>
Yoshi Saito
PHP-users メーリングリストの案内