[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 メーリングリストの案内