![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
TName |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.3.2008 Репутация: нет Всего: нет |
Итак...
Ситуация такая: существует база данных в кодировке UTF-8. В базе лежат пути к файлам. is_file() даёт true на латинницу и false на любые другие символы, хотя файлы существуют, и имя их хранится верно. Задача: проверить существование файла с именем, содержащим unicode-символы. Решение: ...пока отсутствует... |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а file_exists() что показывает?
|
|||
|
||||
TName |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.3.2008 Репутация: нет Всего: нет |
Если честно, это вопрос был из разряда "вдруг кто-нибудь знает?". Вобще, для русских символов и для задачи вцелом достаточно cp1251 "и никаких гвоздей". Просто стало интересно, что будет, если имя файла,например, арабской вязью сделать. Поэтому пока сам сильно не углублялся в исследования. Позже отпишусь о результатах эксперимента.
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
вообще-то ничего, и я лично не сталкивался с проблемами. nix сервер позволяет создавать файлы с любыми именами в любой кодировке. небольшие заморочки наблюдаются на винде, но только в том месте, когда не настроена кодировка. то есть на каком-то этапе происходит перекодирование имени, а впоследствии его не удаётся воспроизвести
|
|||
|
||||
TName |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.3.2008 Репутация: нет Всего: нет |
Вот что у меня получается.
Код страницы (сам файл страницы тоже в UTF-8 без BOM):
вот результат:
Окружение: PHP Version 5.2.10 Web Server Server Name 127.0.0.1 Server Software Apache/2.2.12 (Win32) mod_ssl/2.2.12 OpenSSL/0.9.8k OS Version Windows XP Кодировки в винде включены чуть ли не все... Где грабли? ![]() |
||||
|
|||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
дык, я это ж винда. у неё имя файла по определению в cp1251. потому он и не находит твоё "D:\\Файл.txt"; - это ведь в utf-8, то есть совсем другой кодовый набор
попробуй так:
Добавлено через 43 секунды и почему d:\\ ? |
|||
|
||||
TName |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.3.2008 Репутация: нет Всего: нет |
Спасибо, разъяснили
![]() Суть действительно в кодировке. Но не только. Из корня D: фаил из-за прав был недоступен. Положил "Файл.txt" рядом со скриптом (или в дочерние папки от корня хоста) и перекодировал iconv("UTF-8", "Windows-1251", $f) - работатет. Скрипт немного изменился:
Что занимательно, результат от имени файла с арабской вязью следующий:
Т.е. это папка теперь :( Двойной слэш - это экранирование бэк-слэша в строке (С ними тоже работает). Т.е. теперь, чтобы работало везде, надо детектить ОС и втыкать перекодирование, если надо? Это сообщение отредактировал(а) TName - 8.2.2010, 17:38 |
||||
|
|||||
TName |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.3.2008 Репутация: нет Всего: нет |
ну да, логично, чОрт возьми.... Конечно папка. Имя файла-то отпало в переменной. Остался только путь до папки.
И что теперь? Винду выкидывать? (Вопрос риторический). |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а как тебе удалось создать файл с арабской вязью в имене? непомню таких символов в cp1251
|
|||
|
||||
TName |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.3.2008 Репутация: нет Всего: нет |
А создал очень просто
![]() Скопировал часть текста с арабской версии сайта МВД России и вставил в текстовое поле при переименовании файла. В том-то и секрет, что винда с юникодом в принципе дружит. Но вот кто кого не понимает (апач или винда) - вопрос. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |