• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HYMLファイルの書換えに伴う文字化け)

HYMLファイルの書換えに伴う文字化け

このQ&Aのポイント
  • 共有サーバーで複数のドメインを管理・運営しており、各ドメインのindex.htmlの内容を書換えたいと考えています。しかし、PHPの指定文字コードとHTMLの文字コードの不一致のため、実行すると文字化けが発生してしまいます。
  • un_txt.phpというファイルにアクセスすることで、各フォルダ内にあるindex.html内の内容を書換えたいと思っています。しかし、PHPはEUCで指定されており、書換えたいHTMLファイルはShift-JISとなっているため、文字化けが発生します。
  • 現時点でのスクリプトの問題点を指摘してほしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.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, '&nbsp;', $source); } file_put_contents($file, $source) or die('cannot write ' . $file); }

pedm
質問者

お礼

shimix様 ご親切なアドバイスをありがとうございます。 また的確なご指摘をありがとうございます。 このソースですが他のソースからの流用だったため、file_get_contentsなど一部が残ったままとなっていました。 質問投稿後、見直すことで文字化けも直っておりましたが、shimix様のスマートなソースを参考に勉強させて頂こうと思います。 この度はご親切なアドバイスをありがとうございました。

関連するQ&A