fgetcsv() не читает арабские символы

При попытке импортировать файл CSV арабские символы исчезают при запуске fgetcsv, но когда я печатаю вывод из fopen, арабские символы отображаются нормально. Странно то, что это происходит только в нашей производственной среде, а не в моей среде разработки, где fgetcsv прекрасно читает арабские символы. Есть ли какие-то настройки сервера, которые неправильно установлены в рабочей среде?


person Cole Marshall    schedule 16.08.2013    source источник
comment
какая кодировка файла csv?   -  person user4035    schedule 17.08.2013
comment
Не могу воспроизвести: создал тестовый файл на арабском языке в utf8. fgetcsv работал правильно.   -  person user4035    schedule 17.08.2013
comment
Можете выложить файл?   -  person pguardiario    schedule 17.08.2013
comment
В файле CSV используется кодировка UTF-8, но, как указал Лафор, проблема заключалась в том, что языковой стандарт не был правильно установлен в рабочей среде.   -  person Cole Marshall    schedule 20.08.2013


Ответы (1)


fgetcsv() делает предположения о кодировке файла на основе локали системы. Как указано в руководстве по PHP:

Эта функция учитывает настройку локали. Если LANG, например. en_US.UTF-8, файлы в однобайтовой кодировке читаются этой функцией неправильно.

Возможно, вы захотите сравнить настройки локали на двух ваших машинах и либо навсегда изменить их на одной из них, либо использовать что-то вроде setlocale(LC_ALL, 'ar_AE.utf8') (второй аргумент, очевидно, будет зависеть от кодировки вашего файла) перед вашим fgetcsv().

person lafor    schedule 16.08.2013
comment
Это неприменимо, потому что арабский язык никогда не будет однобайтовой кодировкой. - person pguardiario; 17.08.2013
comment
@pguardiario Я знаю, но языковой стандарт системы может быть основан на UTF-16. - person lafor; 17.08.2013
comment
Спасибо! Локаль, по-видимому, была неправильно установлена ​​на рабочем сервере. Использование setlocale(LC_ALL, 'en_US.UTF-8') до fgetcsv помогло. - person Cole Marshall; 20.08.2013