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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Создается папка с нечитаемым именем
freelsd
Отправлено: 08 Октября, 2015 - 11:07:19
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Я получаю страницу в utf-8, в ней нахожу строку и нужно создать директорию, которая называется именем этой строки. Но в консоли и на выходе получаются кракозябры, вместо нормального имени папки. Пробовал записать строку в текстовый файл - нормально отображается. В чем может быть проблема и как рещить? Пробовал через iconv из utf-8 в cp-1251 - не помогло, на выходе пустая строка.
 
 Top
andrewkard
Отправлено: 08 Октября, 2015 - 11:17:53
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




freelsd пишет:
нужно создать директорию, которая называется именем этой строки

директории лучше создавать в латинице
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 11:39:51
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




andrewkard пишет:
freelsd пишет:
нужно создать директорию, которая называется именем этой строки

директории лучше создавать в латинице


А если необходимо создать папку с кириллическими символами? Я кстати не понимаю, почему так происходит, windows же поддерживает utf-8.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Октября, 2015 - 11:40:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Если нужно сохранить исходное имя -- rawurlencode() его, так в ФС и писать.
(Добавление)
freelsd пишет:
windows же поддерживает utf-8
Только не в NTFS, там чуть ли не цп-866
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 11:47:22
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




DeepVarvar пишет:
Если нужно сохранить исходное имя -- rawurlencode() его, так в ФС и писать.
(Добавление)
freelsd пишет:
windows же поддерживает utf-8
Только не в NTFS, там чуть ли не цп-866

Ну нет, rawurlencode не годится. Суть в том что строка, которой мне нужно обозвать папку это обычный текст в странице. Но страница в utf-8 выдает текст. Но в консоли эта строка выглядит как черти-что, а папка в windows создается какими-то кракозябрами. Причем, если записать строку в файл, то она нормально по-русски читается. Почему так происходит?
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Октября, 2015 - 11:55:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Надеюсь ты только притворяешься идиотом.
Не нравится равурленкоде возьми бейс64/бейс62/бейсN -- главнй смысл тут преобразовать все в чистый ASCII который тебя устроит и будет возможность сделать обратное преобразование имени.
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 12:03:12
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




DeepVarvar пишет:
Надеюсь ты только притворяешься идиотом.
Не нравится равурленкоде возьми бейс64/бейс62/бейсN -- главнй смысл тут преобразовать все в чистый ASCII который тебя устроит и будет возможность сделать обратное преобразование имени.

Я по-моему точно описал проблему. Мне нужно сконвертировать кириллический текст так, чтобы имя папки отображалось нормально, а не каракулями. Конвертация с помощью iconv не помогает, выдает ошибку "Detected an illegal character in input string". Причем тут urlencode() и base64 я не понимаю. Может пример приведете, где то о чем вы говорите работает вообще?

(Отредактировано автором: 08 Октября, 2015 - 12:18:58)

 
 Top
andrewkard
Отправлено: 08 Октября, 2015 - 12:11:24
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




andrewkard пишет:
директории лучше создавать в латинице

Если уж очень хочется, пробуйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'Папка';
  3. $str = iconv('utf-8','cp1251',$str);
  4. mkdir(__DIR__.'/'.$str);
  5.  
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 12:18:39
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




andrewkard пишет:
andrewkard пишет:
директории лучше создавать в латинице

Если уж очень хочется, пробуйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'Папка';
  3. $str = iconv('utf-8','cp1251',$str);
  4. mkdir(__DIR__.'/'.$str);
  5.  


Опять-таки, функция выдает ошибку
Detected an illegal character in input string
 
 Top
andrewkard
Отправлено: 08 Октября, 2015 - 12:22:30
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Проверьте кодировку строки, на всякий случай и файла.
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 12:24:07
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




andrewkard пишет:
Проверьте кодировку строки, на всякий случай и файла.

mb_detect_encoding() возвращает utf-8, файл utf-8 без BOM.
 
 Top
andrewkard
Отправлено: 08 Октября, 2015 - 12:34:13
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




freelsd пишет:
Detected an illegal character in input string

Добавьте ключи, может станет ясно:
Цитата:

Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько нескольких наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены.
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 12:38:32
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




andrewkard пишет:
freelsd пишет:
Detected an illegal character in input string

Добавьте ключи, может станет ясно:
Цитата:

Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько нескольких наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены.


TRANSLIT выдает ту же ошибку, с IGNORE возвращается часть имени папки без некоторых символов. В общем, не то что хотелось бы. Главное, что не понятно почему так происходит.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Октября, 2015 - 12:51:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Это происходит из-за ограничений именований в различных файловых системах.
Я сказал как сделать.
Будет работать везде в любой ФС.

Но нет, мышь продолжает жрать кактус.
 
 Top
freelsd
Отправлено: 08 Октября, 2015 - 12:54:48
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




DeepVarvar пишет:
Это происходит из-за ограничений именований в различных файловых системах.
Я сказал как сделать.
Будет работать везде в любой ФС.

Но нет, мышь продолжает жрать кактус.


Можно пример?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB