質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3305閲覧

CKEditor+KCFinder 全角ファイル名の画像が文字化けしてアップロードされる。

ms5025

総合スコア292

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/27 04:41

編集2018/09/27 04:42

前提・実現したいこと

言語:PHP
CKEditor+KCFinderで画像をアップロードするプログラムを作っています。
半角英数のファイル名だと問題なくアップロードできるのに、全角のファイル名をアップロードしようと文字化けしてしまいます。
文字化けしないようにアップロードするにはどのようにすればよいのでしょうか?

発生している問題・エラーメッセージ

Warning

Warning: chmod(): Invalid argument in C:\xampp\htdocs\localhost\public\js\kcfinder\core\class\browser.php on line 699

該当のソースコード

kcfinder内browser.phpです。
ここの下から三行目
chmod($target, $this->config['filePerms']);
の箇所でエラーが出ていました。
エラーログで前後の変数を覗いてみました。
文字化け前のファイル名で参照しにいき、そんなファイルはないよといったエラーなのかなと思うのですが・・・。
アップロードしたファイルが文字化けしていなければ、通常どおり動きそうです。

PHP

1 protected function moveUploadFile($file, $dir) { 2 $message = $this->checkUploadedFile($file); 3 4 if ($message !== true) { 5 if (isset($file['tmp_name'])) 6 @unlink($file['tmp_name']); 7 return "{$file['name']}: $message"; 8 } 9 10 $filename = $this->normalizeFilename($file['name']); 11 $target = "$dir/" . file::getInexistantFilename($filename, $dir); 12 13 if (!@move_uploaded_file($file['tmp_name'], $target) && 14 !@rename($file['tmp_name'], $target) && 15 !@copy($file['tmp_name'], $target) 16 ) { 17 @unlink($file['tmp_name']); 18 return $this->htmlData($file['name']) . ": " . $this->label("Cannot move uploaded file to target folder."); 19 } elseif (function_exists('chmod')) 20 chmod($target, $this->config['filePerms']); 21 22 $this->makeThumb($target); 23 return "/" . basename($target); 24 }

試したこと

browser.php内でbasenameでファイル名を取得している箇所が数か所あるのですが、
そこでそもそも全角ファイル名を取得できていなかったようなので
setlocale(LC_ALL, "Japanese_Japan.932")
をコンストラクタに追加しました。
ですがアップロードされてフォルダに格納されたファイルは文字化けをおこしており、その後の処理がうまくいってないようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ファイル名を全角で指定するのはhttpベースではNGです。
urlencodeするなど適当な半角文字に変更してアップはできませんか?

投稿2018/09/27 05:25

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2018/09/27 05:50

回答ありがとうございます。 そうなんですね!NGだったんですか・・・ uploadする際urlencodeをかけてアップロードすればうまく動きました。 ただ、kcfinderのサーバブラウザで、画像ファイルの下に ファイル名が一緒に表記されているのですが、 当たり前ですが %E6%9C%AC%E3%81%AE%E7%84%A1%E6%96%99%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E7%B4%A0%E6%9D%90.png ・・・みたいな文字で、 これで客先OKでないんじゃないかなぁと思っています。 表示用のファイル名だけ、デコードしてやればいいんでしょうかね??
yambejp

2018/09/27 05:53

そうですね見せるときはデコードしてあげてください
ms5025

2018/09/27 06:18

ありがとうございました。うまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問