« Allowed memory size of ほにゃらら | メイン | CSS テキスト範囲内での自動折り返し »

2009年07月18日

PHP アップロードファイル文字化け

PHPで日本語名のファイルをアップロードすると文字化けする場合の対処
もしくは、特定の文字コードに変換してアップロードしたい場合
先に言っておくと

関数
mb_convert_encoding を使う。

例題はfile1.phpというフォームからファイルをアップロードして
「doc」というフォルダーに保存するプログラム

file1.php

<html>
<head>
<tilte>アップロードフォーム</title>
</head>
<body>
<form method="POST" action="file2.php" enctype="multipart/form-data">
ファイル:
<input type="file" name="uploaded" size="50" />
<input type="submit" value="アップロード" />
</form>
</body>
</html>

file2.php(文字化けするタイプ)

<?php
move_uploaded_file
($_FIELS['uploaded']['tmp_name'],'./doc/'.$_FILES['uploaded']['name']);
echo
"アップロード成功しました。";
?>

file2.php(文字化けしないタイプ)

<?php
$str
= './doc/'.$_FILES['uploaded']['name'];
$str = mb_convert_encoding($str, "SJIS", "AUTO");
move_uploaded_file($_FILES['uploaded']['tmp_name'], $str);
echo
"アップロード完了しました。";
?>

補足
mb_convert_encoding(エンコードしたい部分, "変換したいコード", "変更前のコード")
AUTOにしておけば特に前のコードを気にすることが無い。
Windowsベースで日本語ファイルを保存する場合には
SJISでないと文字化けするっぽ。

Copyright ©2009 wghost All Rights Reserved.