Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проблема: mkdir() с именем папки в utf8
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
Я получаю страницу в utf-8, в ней нахожу строку и нужно создать директорию, которая называется именем этой строки. Но в консоли и на выходе получаются кракозябры, вместо нормального имени папки. Пробовал записать строку в текстовый файл - нормально отображается. В чем может быть проблема и как рещить? Пробовал через iconv из utf-8 в cp-1251 - не помогло, на выходе пустая строка.
andrewkard
Отправлено: 08 Октября, 2015 - 11:17:53
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
freelsd пишет:
нужно создать директорию, которая называется именем этой строки
директории лучше создавать в латинице
freelsd
Отправлено: 08 Октября, 2015 - 11:39:51
Гость
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
andrewkard пишет:
freelsd пишет:
нужно создать директорию, которая называется именем этой строки
директории лучше создавать в латинице
А если необходимо создать папку с кириллическими символами? Я кстати не понимаю, почему так происходит, windows же поддерживает utf-8.
DeepVarvar
Отправлено: 08 Октября, 2015 - 11:40:27
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Если нужно сохранить исходное имя -- rawurlencode() его, так в ФС и писать. (Добавление)
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
DeepVarvar пишет:
Если нужно сохранить исходное имя -- rawurlencode() его, так в ФС и писать. (Добавление)
freelsd пишет:
windows же поддерживает utf-8
Только не в NTFS, там чуть ли не цп-866
Ну нет, rawurlencode не годится. Суть в том что строка, которой мне нужно обозвать папку это обычный текст в странице. Но страница в utf-8 выдает текст. Но в консоли эта строка выглядит как черти-что, а папка в windows создается какими-то кракозябрами. Причем, если записать строку в файл, то она нормально по-русски читается. Почему так происходит?
DeepVarvar
Отправлено: 08 Октября, 2015 - 11:55:23
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Надеюсь ты только притворяешься идиотом.
Не нравится равурленкоде возьми бейс64/бейс62/бейсN -- главнй смысл тут преобразовать все в чистый ASCII который тебя устроит и будет возможность сделать обратное преобразование имени.
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
DeepVarvar пишет:
Надеюсь ты только притворяешься идиотом.
Не нравится равурленкоде возьми бейс64/бейс62/бейсN -- главнй смысл тут преобразовать все в чистый ASCII который тебя устроит и будет возможность сделать обратное преобразование имени.
Я по-моему точно описал проблему. Мне нужно сконвертировать кириллический текст так, чтобы имя папки отображалось нормально, а не каракулями. Конвертация с помощью iconv не помогает, выдает ошибку "Detected an illegal character in input string". Причем тут urlencode() и base64 я не понимаю. Может пример приведете, где то о чем вы говорите работает вообще?
Опять-таки, функция выдает ошибку
Detected an illegal character in input string
andrewkard
Отправлено: 08 Октября, 2015 - 12:22:30
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Проверьте кодировку строки, на всякий случай и файла.
freelsd
Отправлено: 08 Октября, 2015 - 12:24:07
Гость
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
andrewkard пишет:
Проверьте кодировку строки, на всякий случай и файла.
mb_detect_encoding() возвращает utf-8, файл utf-8 без BOM.
andrewkard
Отправлено: 08 Октября, 2015 - 12:34:13
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
freelsd пишет:
Detected an illegal character in input string
Добавьте ключи, может станет ясно:
Цитата:
Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько нескольких наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены.
freelsd
Отправлено: 08 Октября, 2015 - 12:38:32
Гость
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
andrewkard пишет:
freelsd пишет:
Detected an illegal character in input string
Добавьте ключи, может станет ясно:
Цитата:
Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько нескольких наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены.
TRANSLIT выдает ту же ошибку, с IGNORE возвращается часть имени папки без некоторых символов. В общем, не то что хотелось бы. Главное, что не понятно почему так происходит.
DeepVarvar
Отправлено: 08 Октября, 2015 - 12:51:55
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Это происходит из-за ограничений именований в различных файловых системах.
Я сказал как сделать.
Будет работать везде в любой ФС.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.