- ベストアンサー
HYMLファイルの書換えに伴う文字化け
- 共有サーバーで複数のドメインを管理・運営しており、各ドメインのindex.htmlの内容を書換えたいと考えています。しかし、PHPの指定文字コードとHTMLの文字コードの不一致のため、実行すると文字化けが発生してしまいます。
- un_txt.phpというファイルにアクセスすることで、各フォルダ内にあるindex.html内の内容を書換えたいと思っています。しかし、PHPはEUCで指定されており、書換えたいHTMLファイルはShift-JISとなっているため、文字化けが発生します。
- 現時点でのスクリプトの問題点を指摘してほしいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>$main = mb_convert_encoding($main,"SJIS","EUC-JP"); EUC-JPからSJISにして書き込もうとされているようですが、そもそも(SJISのファイルを読んでから)EUC-JPにしてもいないのに戻すというのが謎です。またfile_get_contentsで読んだまま$addstrを放置しているのもちょっと意図がわかりませんし、こういう置換の用途にはstrtrは使いにくいのではとも思います(マニュアルでどういう関数なのかを確認すれば、まず使わないと思うのですが。 http://jp.php.net/manual/ja/function.strtr.php >from と to の長さが異なる場合、長い方の余分な文字は無視されます。 返される文字列の長さは、もとの str と同じになります。 マルチバイト関数を使っていないのであれば、先に$text_dataをSJISにしてしまってもいいように思います。 <?php $text_data = array("ホームページ", "アイフォン", "スマートフォン"); mb_convert_variables('SJIS', 'EUC-JP', $text_data); $array = glob('*', GLOB_ONLYDIR); foreach ($array as $dir) { $file = $dir . "/index.html"; if (!is_readable($file)) { die('not readable ' . $file); } if (!is_writable($file)) { die('not writable ' . $file); } $source = file_get_contents($file) or die('cannot read ' . $file); foreach ($text_data as $text) { $source = str_replace($text, ' ', $source); } file_put_contents($file, $source) or die('cannot write ' . $file); }
お礼
shimix様 ご親切なアドバイスをありがとうございます。 また的確なご指摘をありがとうございます。 このソースですが他のソースからの流用だったため、file_get_contentsなど一部が残ったままとなっていました。 質問投稿後、見直すことで文字化けも直っておりましたが、shimix様のスマートなソースを参考に勉強させて頂こうと思います。 この度はご親切なアドバイスをありがとうございました。