- ベストアンサー
EUC-JPのサイトをSHIFT-JISに変換するには?
EUC-JPのサイトをSHIFT-JISに変換して表示したいのですが、うまくいきません。 どのへんが間違っているのか教えていただけないでしょうか? <?php header("Content-Type: text/html; charset=Shift_JIS"); //EUC-JPデコードされたURL $url = "http://www.hogehoge.com"; //ファイルとして読み込む $fileUrl = @readfile($url); //エンコードする $encUrl = urlencode($fileUrl); //SHIFT-JISに変換する $newUrl = mb_convert_encoding($encUrl, "Shift_JIS", "auto"); //表示する echo $newUrl; ?>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
どういう目的で変換したいかは分かりませんが、 > $encUrl = urlencode($fileUrl); これは何の為にやっているのでしょうか? 読込んだテキストをURLエンコードする意味が分かりません。この部分は不必要かと思います。 また、mb_convert_encodingで元エンコードを"auto"としていますが、EUC-JPと分かっている場合は"EUC-JP"と明示しておいた方が間違いありません。 最終的に出力される文字コードがSJISとなったとしても、元のホームページのヘッダ部分等に文字コード設定があればそれも変更しないとブラウザが混乱します。 例えば $str = str_replace("EUC-JP","Shift-Jis", $str); のような変換をする必要があると思います。 参考まで。
その他の回答 (2)
- wp_
- ベストアンサー率54% (132/242)
いろいろ突っ込みどころ満載ですが、 とりあえずurlencodeの使い方が間違っています。 変数名も誤解の元となっているでしょう。 それとurlencodeは推奨されていません。どうせ使うならrowurlencode使いましょう。 No.1の方も言っているとおり、urlencodeを排除すれば問題ないと思われます。 URLエンコードと表示される文字コードは別物です。 直接関係はないのですが、 httpの呼び出しをphpで行うのは非効率です。 第三者のサーバへのアクセスはボットによるクロールと取られる可能性もあります。 内部処理の場合はできるだけftp,scpなどの環境を整えることをお勧めします。
お礼
ご説明ありがとうございます。 >No.1の方も言っているとおり、urlencodeを排除すれば問題ないと思われます。 これでも文字化けしてしまっています…。もう少し勉強してみます。 >httpの呼び出しをphpで行うのは非効率です。 >第三者のサーバへのアクセスはボットによるクロールと取られる可能性もあります。 >内部処理の場合はできるだけftp,scpなどの環境を整えることをお勧めします。 そうなのですか。いろいろ問題もあるのですね。検討してみたいと思います。
- memphis140
- ベストアンサー率34% (100/288)
読み込んだHTMLの中に、「Content-Type」のヘッダが有る場合は、 それをSJISに置き換える必要があります。 その場合、最初の1行目に書かれている「header」は邪魔です。 またスタイルシート、Javascriptが使われている場合は、 そちらのほうの文字コードも変換する必要があります。
お礼
ありがとうございます。 変換したいサイトのhtmlソースにはContent-Typeのヘッダはなく、スタイルシートやjavascriptも使用しておりません。
お礼
すみません、いろいろ勘違いしていたようです。 やりたいことは、EUC-JPでデコードされたhtmlソースファイルからいろいろ情報(文字列)を抜きだしてそれを利用したかったのですが、「ケセクヘタ・/td>ネッヌ菘・br>11:10ネッヌ菘」のように文字化けしてしまって抜き出すことができません。 そこでEUC-JPをSHIFT-JPにデコードしなおせば文字化けがなくうまく抜き出しができると思ったのです。 >元のホームページのヘッダ部分等に文字コード設定があればそれも 確認しましたがそのhtmlのヘッダには文字コード設定が書いていませんでした。 またcssも使っていないタグだけの記述で構成されたhtmlです。