重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

サーバー環境
Win2000
Apache/2.0.55
PHP Version 4.4.1
MySQL Version 3.23.49 (SJIS)

php.iniの設定
magic_quotes_gpc=Off
mbstring.http_input=auto
mbstring.http_output=SJIS
mbstring.internal_encoding=SJIS
にて運用しています。

携帯での利用を考慮して、SJISでの運用が必要であったため、EUC-JPへの変更は考えていません。
能などの「文字化け文字」の表示は、addslashes,stripslashes等で処理しており問題はありません。
今回、ファイル送信<input type=file name=userfile>のファイル送信での\の処理についてお聞きしたく質問しました。
過去の例にも挙げられていますが、可能性などの文字は、SJIS環境で送信すると、可能\性と表示されます。表示は、stripslashesで\をとればいいと思いますが、上記のinput type=fileでファイルを指定すると
C:\MyDocument\可能性.doc は
D:\MyDocument\可能\性.doc となってしまい、パスと判断され
フォームの送信後の $userfile_nameでは、「性.doc」となってしまいます。

現在のサーバー環境を変えることで大きな影響がでるのは、できるだけ避けたいです。
なにかよい意見がございましたら、ご教授ください。よろしくお願いします。

A 回答 (3件)

いろいろ調べて以下のサンプルプログラムを作ってみました


accept-charsetでformの文字コードを変えて送信できます
ただIEでは表示ページの文字コードに存在しない文字がないとaccept-charsetを使用しないようです。そのためにダミーのパラメータを使っています。
IE6とFireFox,Mozilla1.7では大丈夫でした。
<?php
header("Content-type: text/html; charset=Shif_JIS");
echo mb_convert_encoding($_FILES['userfile']['name'], "sjis", "utf-8");
?>
<form enctype="multipart/form-data" action="" method="POST" accept-charset="utf-8">
<input type="hidden" name="dummy" value="�"><!-- IEにaccept-charsetを理解させるおまじない(^^) -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
    • good
    • 0
この回答へのお礼

他の案も考えましたが、非常に影響が大きかったため、php504さんの意見を参考にスクリプトを作り直しましたところ、うまくいきました。
どうもありがとうございました。

出張&土日休みで返答が遅れましたことお詫びします。

お礼日時:2006/03/27 13:45

興味があったので色々調べてみました。


参考URLのスレッドを読んでみてください。
質問者様の悩みと同じだと思います。

そのスレッドのNo12577のプログラムを若干修正して使えば
綺麗にファイル名を取得することができましたよ(^-^
(質問者様と同じ設定[php.ini]にして実験してみました)

アップロードされたファイルの中身を見るときはtmp_fileを開くと思いますが・・・


ちなみに~
私も携帯サイトを作っていますが、
mbstring.internal_encoding=EUC-JP
としてあります。
mbstring.http_output=SJIS
で表示はSJIS出力になりますので、携帯でも問題なしですよ。。
プログラムをEUC-JPで書くだけです。

では~

参考URL:http://ns1.php.gr.jp/pipermail/php-users/2003-Ja …
    • good
    • 0
この回答へのお礼

返答ありがとうございました。
ただ、mbstring.internal_encoding=EUC-JP とすると、
その他の数百のスクリプトがSJISで書かれているため影響が大であると考え、php504さんの案を採用しました。
今後、新規で作成するときは、参考にさせていただきます。
どうもありがとうございました。

お礼日時:2006/03/27 13:43

ファイル名に\は使えないことになっているのでしょうがないですね。


PHP3はファイル名がフルパスで取得できたと思うのでPHP3にして自分で工夫するか(\の前の文字が0x80以上だったらその前の\までをファイル名に追加というのを繰り返す)
または携帯でアップロード可能な機種は限られているのでそこだけEUCにしてしまう(自信ないですがアップロード可能な携帯はEUCが使えたような)

この回答への補足

現在のところ、PCでのブラウザでの運用ですので、
>そこだけEUCにしてしまう
というのもありかもしれません。
ただ、プログラムをSJISからEUCに変換したとしても送信時には
mbstring.http_input=auto
mbstring.http_output=SJIS
mbstring.internal_encoding=SJIS
これらの設定は、支障になることはないでしょうか?

補足日時:2006/03/24 12:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!