文字コードがSJISだと、ファイル名に「ソ」とか「表」などの0x5c(\)を含む文字があると文字化けしますよね。
こういうときはファイル名だけ別のフォームデータとして送れば文字化けしていないファイル名を使用することができます。
以下はサンプル。
—————————————–
a.php
<html>
<head>
<script type=”text/javascript”>
function saveFilename()
{
document.all.upldfilename.value = document.all.upldfile.value;
}
</script>
</head>
<body>
<form enctype=”multipart/form-data” method=”post” action=”b.php” onsubmit=”saveFilename();”>
<input type=”file” name=”upldfile” id=”upldfile”>
<input type=”hidden” name=”upldfilename” id=”upldfilename”>
<input type=”submit”>
</form>
</body>
</html>
—————————————–
b.php
<html>
<head>
</head>
<body>
<p>オートグローバル$_FILESでは文字化けする</p>
<p>
<?php
echo $_FILES[‘upldfile’][‘name’];
?>
</p>
<p>こちらは文字化けしない</p>
<p>
<?php
echo mb_substr($_POST[‘upldfilename’], mb_strrpos($_POST[‘upldfilename’], “\\”)+1);
?>
</p>
</body>
</html>
—————————————–
php.ini とかで文字化けしない方法があるんじゃないかと思って何時間か調べたけど、見つからなかったのでこの方法で逃げました。