ファイルアップロードで文字化けする場合における究極の逃げ
色々とお騒がせしている件ですが。。。本当にスミマセン。
同じような現象に悩まされていた時があって、原因が分からない。。。けど、何とかしないといけない!という状況に追い込まれ、苦肉の策として以下の方法で逃げた事があったのを思い出しました。
究極の逃げと書いておきながらJavaScriptを使える事が前提条件なので、携帯環境では適用できないかもしれません。
ひとまず紹介。
<?php error_reporting( E_ALL ); mb_http_output( "SJIS-win" ); ob_start( "mb_output_handler" ); header( "Content-type: text/html; charset=Shift_JIS" ); if( isset( $_POST["name_hidden"] ) && strlen( $_POST["name_hidden"] ) > 0 ) { $_POST["name_hidden"] = rawurldecode( $_POST["name_hidden"] ); mb_convert_variables( mb_internal_encoding( ), "UTF-8", $_POST ); } else { $_POST["name_hidden"] = "デフォルト値"; } ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> </head> <SCRIPT LANGUAGE="JavaScript"> <!-- function goChange( ) { document.normal.name_hidden.value = encodeURI( document.normal.name.value ); } function goChange_Upload( ) { document.up.name_hidden.value = encodeURI( document.up.name.value ); } </SCRIPT> <body> <form name="up" enctype="multipart/form-data" action="form.php" method="POST" onSubmit="JavaScript:goChange_Upload( );"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> ファイルあっぷろーど:<input name="userfile" type="file" /><br /> 文字列の入力 :<input type="text" name="name" value="<? echo htmlspecialchars( $_POST["name_hidden"], ENT_QUOTES ); ?>" /> <input type="submit" value="送信" /> <input type="hidden" name="name_hidden" value="" /> </form> <br /> <form name="normal" action="form.php" method="POST" onSubmit="JavaScript:goChange( );"> 通常のPOST :<input type="text" name="name" value="<? echo htmlspecialchars( $_POST["name_hidden"], ENT_QUOTES ); ?>" /> <input type="submit" value="送信" /> <input type="hidden" name="name_hidden" value="" /> </form> <br /> <pre> <? print_r( $_POST ); ?> </pre> </body> </html>