jQuery File Upload で日本語ファイルをアップロードするとファイル名が消える

カテゴリ: PHP

記事投稿日: 2014年3月3日



(1) 現象

半角英数名のファイルのアップロードはまったく問題ありませんが、
日本語名が混じると、ファイル名が消え、拡張子だけが残ります。
「.gif」や、「.jpg」という状態です。
この不自然なファイル名が取得されるため、更新が反映されないなどの
問題を引き起こします。

(2) 原因

PHP5の関数「basename」のバグです。
PHP6で解決されるということで、現在バグが放置状態、非推奨となっているようです。
アップロード処理で使用しているjQueryのプラグイン「jQuery File Upload 」に
この関数が潜んでおり、結果として、日本語名のファイル名が消えてしまう、
という現象を引き起こしていることが分かりました。

(3) 解決策

バグのある関数「basename」に代わる処理を作ることで対処できました。

// 対応前
$filename = basename($_FILES['upload_hoge']['name']);
// 対応後
$filename = end(explode("/", $_FILES['upload_hoge']['name']));

(4) 懸念事項

海外製のソフトでは同様の問題があります
WordPressのプラグイン「ContactForm」や、CMSの「Drupal」でも
同様の現象が起きるようです。
「basename」関数については、日本語特有の問題のため、
プラグインの自動アップデートなどでは直らない可能性があり、要注意です。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA




トップに戻る