basenameを取得したところ、名前の頭の日本語が消失するという現象があり、調べたところsetlocaleで回避できるという記事が見つかりました。
https://blog.bgbgbg.net/archives/2331
しかしながら、下記の通りsetlocaleをしても、setlocaleが有効にならず、var_dumpしたところ、falseが返ってきました。
サーバーに言語が入っていないと思い、サーバーで確認したところ「ja_JP.UTF-8」は存在していました。
なぜsetlocaleが有効にならないか分からないのですが、どなたかご教示頂ければ幸甚で御座います。
どうぞよろしくお願い申し上げます。
PHP
1print_r(mb_detect_order()); 2// ( 3// [0] => ASCII 4// [1] => UTF-8 5//) 6 7$name = "/etc/ハローワールド0101.pdf"; 8 9//現在のlocaleを確認 10echo setlocale(LC_ALL, 0); // C 11 12setlocale(LC_ALL,'ja_JP.UTF-8'); 13// var_dump(setlocale(LC_ALL,'ja_JP.UTF-8')); // bool(false) 14 15$filename = basename($name); 16echo $filename; //0101.pdf 17
サーバー側の状況
$ locale -a //日本語部分抜粋 ja_JP ja_JP.eucjp ja_JP.ujis ja_JP.utf8 japanese japanese.euc $ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
##環境
OS : amazon linux2
PHP : 7.2
webサーバー : nginx 1.12.2
##試したこと
下記のsetlocaleが全てfalseでした。
var_dump(setlocale(LC_ALL,'ja_JP.utf8')); // bool(false)
var_dump(setlocale(LC_ALL,'ja_JP')); // bool(false)
var_dump(setlocale(LC_ALL,'ja_JP.eucjp')); // bool(false)
var_dump(setlocale(LC_ALL,'ja_JP.ujis')); // bool(false)
var_dump(setlocale(LC_ALL,'japanese')); // bool(false)
var_dump(setlocale(LC_ALL,'japanese.euc')); // bool(false)
回答1件
あなたの回答
tips
プレビュー