• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルのアップロードで文字化けします)

ファイルのアップロードで文字化けする対処方法

このQ&Aのポイント
  • ファイルのアップロードを行うと特定文字以降の名前が消えてしまう問題が発生しています。
  • 対処方法としては、サーバの動作環境やクライアント側の設定を確認する必要があります。
  • Linux(FedoraCore3)、Apache2.0.52、PHP4.3.10の動作環境で、Windows(2000、XP)のクライアント側からアップロードする場合に文字化けの可能性があります。

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

  • ベストアンサー
回答No.1

5Cの取り扱いなのですが、文字コードによっては バックスラッシュ(\)として扱われてしまうと思います。 原因は、スクリプト自身の文字コードの可能性が高そうです。 EUCではその問題は出ないと思いますので、EUCをオススメします。 スクリプトを保存する際、 「名前を付けて保存」→「エンコードの種類」→「日本語(EUC)」 として保存すれば大丈夫だと思います。(秀丸エディタの場合) 試していないので分かりませんが、多分大丈夫だと思います。 あとは詳しい人に譲ります^^ もし駄目だったら、文字コード関係を考えたほうがいいと思います。 サーバの文字コード(php.ini) アップロードするファイルの文字コードなど

wipe
質問者

お礼

回答ありがとうございます。 charsetをEUC-JPにすることにより、5Cを含む文字列のデータ抜けがなくなりました。 問題が解決でき非常に嬉しいです。 ただ、今までのwebページやSQLデータをSHIFT-JISで作っているのでここだけEUC-JPで作成するのは、若干いやらしい感じがします。 サーバがLinuxなのでEUC-JPで作ろうかも考えたのですが、クライアント側がほぼWindowsなのでSJISに統一してしまいました。構想段階のミスでもあります。 ひとまずこれで解決ですが、最終的にはご指摘のように文字コードの設定で解決したいと思います。 アップロードするファイルはクライアント側なので変更できないので、サーバ側の設定で対処したいと思います。 現状ではこの問題以外、WindowsからでもLinuxからでも文字化けの起きないよう設定になっています。 今回のような不具合はapacheの設定なのか、phpの設定なのか分からないでおります。 もし、ご存知であればご教授お願いいたします。 ご回答、ありがとうございました。

その他の回答 (1)

回答No.2

ANo.1の者です。 問題が解決できてよかったです^^ おそらくwipeさんの環境は、 PHPの内部文字コードがEUCなのではないでしょうか。 その場合、入ってくるデータは全てEUCだとサーバが思い込むので、 今回の事例のように5Cを(\)と勘違いしてしまったのだと思います。 今回は、ファイルのアップロードの際の不具合ということを考えると、 PHPの内部エンコーディングの可能性が高いのではないでしょうか。 Apacheはあくまでブラウザに対しての出力時のエンコーディングだと思いますので。 文字コードの問題で、このような不具合が起こる場合が多いので、 こんな風に統一してみたらいかがでしょうか。 Apacheの文字コード:SJIS httpd.confを編集  AddDefaultCharset shift_jis  LanguagePriority ja en da nl et fr de el it kr no pl pt pt-br ltz ca es sv tw PHPの文字コード:SJIS php.iniを編集  [mbstring]  mbstring.language = Japanese  mbstring.internal_encoding = SJIS  mbstring.http_input = auto  mbstring.http_output = SJIS  mbstring.encoding_translation = On  mbstring.detect_order = auto  mbstring.substitute_character = none; DBの文字コード:SJIS スクリプトの文字コード:SJIS アップロードファイルの文字コード:SJIS としておけばまず問題ないと思います。 おそらくwipeさんの環境は、mbstring.internal_encoding = EUC-JP などになっているのではないでしょうか。 SJIS以外使うことが無いのでしたら、これでOKだと思います。 試していないので、間違えていたらごめんなさい^^

wipe
質問者

お礼

度重なる回答ありがとうございます。 ご指摘の通りapache、phpの設定を変更いたしました。 変更前の設定は以下の通りでした。  httpd.conf   #AddDefaultCharset shift_jis   LanguagePriority ja en da nl et fr de el it kr no pl pt pt-br ltz ca es sv tw  php.ini  [mbstring]   mbstring.language = Japanese   mbstring.internal_encoding = SJIS   ;mbstring.http_input = auto   mbstring.http_output = SJIS   ;mbstring.encoding_translation = On   ;mbstring.detect_order = auto   mbstring.substitute_character = none; 残念ながら結果は以前と同様でした。 (「今週の予定.txt」をアップロードすると「定.txt」 予=975C) 文字コードがSJISに固定されてしまったため、EUCで書かれたコードが文字化けしますがそれ以外は特に変化はみられませんでした。 不具合の原因が何によるものなのか分からないので、何をどうすれば分からないのですが、 私の知識不足でもあるので、もう少し勉強させていただきます。 また、何か解決策をご存知でしたらご教授お願いいたします。 回答ありがとうございました。

関連するQ&A