ファイルのアップロードを行うと特定文字以降の名前が消えてしまいます。
(予、表など2バイトコードに5Cが含まれる文字)
コードは下のように書いています。
<form enctype="multipart/form-data" action="upload_fnc.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
サーバの動作環境はLinux(FedoraCore3)、Apache2.0.52、PHP4.3.10です。
クライアント側はほとんどがWindows(2000、XP)です。
どのようにして対処すればよいか分からなく困っています。
どなたかお分かりの方がいらしたら教えてください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
5Cの取り扱いなのですが、文字コードによっては
バックスラッシュ(\)として扱われてしまうと思います。
原因は、スクリプト自身の文字コードの可能性が高そうです。
EUCではその問題は出ないと思いますので、EUCをオススメします。
スクリプトを保存する際、
「名前を付けて保存」→「エンコードの種類」→「日本語(EUC)」
として保存すれば大丈夫だと思います。(秀丸エディタの場合)
試していないので分かりませんが、多分大丈夫だと思います。
あとは詳しい人に譲ります^^
もし駄目だったら、文字コード関係を考えたほうがいいと思います。
サーバの文字コード(php.ini)
アップロードするファイルの文字コードなど
回答ありがとうございます。
charsetをEUC-JPにすることにより、5Cを含む文字列のデータ抜けがなくなりました。
問題が解決でき非常に嬉しいです。
ただ、今までのwebページやSQLデータをSHIFT-JISで作っているのでここだけEUC-JPで作成するのは、若干いやらしい感じがします。
サーバがLinuxなのでEUC-JPで作ろうかも考えたのですが、クライアント側がほぼWindowsなのでSJISに統一してしまいました。構想段階のミスでもあります。
ひとまずこれで解決ですが、最終的にはご指摘のように文字コードの設定で解決したいと思います。
アップロードするファイルはクライアント側なので変更できないので、サーバ側の設定で対処したいと思います。
現状ではこの問題以外、WindowsからでもLinuxからでも文字化けの起きないよう設定になっています。
今回のような不具合はapacheの設定なのか、phpの設定なのか分からないでおります。
もし、ご存知であればご教授お願いいたします。
ご回答、ありがとうございました。
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だと思います。
試していないので、間違えていたらごめんなさい^^
度重なる回答ありがとうございます。
ご指摘の通り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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
SmartyでHTMLソースの変更が反...
-
アップロードの仕方
-
どうして送信されないのでしょ...
-
ファイルのアップロードを行う...
-
Dreamweaver ドリームウィーバ...
-
ファイルUpload時にファイルサ...
-
ファイルをGET送信でアップロー...
-
ファイルサイズがpost_max_size...
-
FTPClientで転送結果(OKかFAIL)
-
php 完了画面の送信メールのコ...
-
TCPDFについて
-
CFileDialogの最初のディレクト...
-
フォントの色を変えるには?
-
phpのftp_get()でエラーが出ます。
-
phpでget_headers()が使えない?
-
Content-Typeが機能していない?
-
awsにApacheとPHPを入れて、何...
-
XAMPPでApacheが起動しなくなり...
-
PHPのif文でその処理を途中で抜...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
ファイルアップロードの上限を...
-
youtubeに音声のみのmp4ファイ...
-
one drive のアップロード失敗...
-
FTPClientで転送結果(OKかFAIL)
-
VBでクラウドストレージにア...
-
ftpでアップロードが出来ない
-
アップロードできるファイルサ...
-
ファイルをGET送信でアップロー...
-
FTP接続の例外処理
-
PHP 画像アップロード 重複防止
-
「クラウドにアップロード」」...
-
aws cloud9というものを使って...
-
ファイルサイズがpost_max_size...
-
csvファイルをMySQLにインポー...
-
ファイルアップロードしたもの...
-
ファイルのアップロードで、フ...
-
全角ファイル名をアップロード...
-
SmartyでHTMLソースの変更が反...
-
unlinkでどうしてもファイルが...
おすすめ情報