переименование не поддерживает многобайтовые символы - PullRequest
5 голосов
/ 17 мая 2009

Если я напишу:

rename('php109.tmp','test.jpg');

тогда все нормально и работает.

но если я поменяю его на:

rename('php109.tmp','中文.jpg');

сообщит

"Нет такого файла или каталога ...".

Но если многобайтовые символы могут быть записаны в базу данных, то могут быть прочитаны, тогда почему происходит сбой при переименовании?

Ответы [ 4 ]

0 голосов
/ 19 апреля 2015

Этот образец должен помочь, вы должны найти свою кодовую страницу языка и заменить ее. Я тестирую реальный код и он работает в Windows для арабских / персидских имен:

$newname = iconv("utf-8", "cp1256","گچپژ");
echo rename("1.txt", $newname);
0 голосов
/ 19 ноября 2009

Файловые системы не обязательно используют UTF-8. Например, это то, что Википедия говорит о NTFS :

NTFS допускает любую последовательность 16-бит значения для кодировки имени (имена файлов, имена потоков, имена индексов и т. д.). это означает, что поддерживаются кодовые точки UTF-16, но файловая система не проверяет действительна ли последовательность UTF-16 (это позволяет любую последовательность коротких значений, не ограничивается теми, кто в Unicode стандарт).

Возможно, вам потребуется использовать iconv () для преобразования между кодировками.

0 голосов
/ 09 января 2010

Вы пытались ввести setlocale(LC_ALL, array("es_ES.utf-8","es_ES@euro",'es_ES')); или любой другой код вашей страны, чтобы убедиться, что локаль установлена ​​правильно?

Если этот вызов не возвращает что-либо с 'utf-8' в нем, это означает, что он потерпел неудачу и затем вернет текущую локаль.

0 голосов
/ 18 мая 2009

Я почти уверен, что mbstring не имеет ничего общего с этой конкретной проблемой, я думаю, что проблема здесь заключается в кодировании вашего .php файла.

Попробуйте изменить кодировку файла на UTF-8 (без спецификации!) В редакторе кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...