@Andrey_Mirov

Как изменить кодировку файла?

Всем привет.
Вопрос такой. Формирую csv - файл на сервере. В настройках самого сервера и БД стоит кодировка cp-1251.
Ту же кодировку выдает meta charset из самих настроек Битрикса.

При проверке кодировки функцией echo mb_internal_encoding(); - Выводит UTF-8. Почему - не понятно.
Далее. С помощью функции mb_convert_encoding($str, "UTF-8") - я перевожу поля, которые хочу записать в csv - в нужную мне кодировку.

Данный файл я заливаю на сторонний сервис - который перекодирует мои символы в ISO-8859-1, что соотв. неверно.

Что делал?
1) Убирал подключение - header.php в скрипте и менял на подключение пролога, чтобы были доступы модули информационных блоков - и далее ставил header('Content-Type: text/html; charset=utf-8');

2) Убирал подключение - header.php в скрипте и менял на подключение пролога и прям в скрипте писал свой meta utf-8

3) Убирал подключение - header.php в скрипте и менял на подключение пролога и задавал mb_internal_encoding("UTF-8")

Ничего из вышеперечисленного не помогло.

Вопрос вот в чем, правильно ли я понимаю, что раз файл обрабатывается (создается/перезаписывается) на сервере - ему абсолютно все равно, какой heder, meta и тд стоит именно в моем скрипте. Я в этом сомневаюсь, правда.

И второе, как сделать нужные мне действия не меняя cp на utf-8 глобально на сервере.

PS. Файл создавал как через стандартную php - функцию для работы с csv - так и через внутреннюю битриксовскую, которая лежит в модуле (/bitrix/modules/main/classes/general/csv_data.php)
  • Вопрос задан
  • 584 просмотра
Пригласить эксперта
Ответы на вопрос 2
serginhold
@serginhold
CSV это просто строка разделенная запятыми, не надо менять никакие кодировки в header или на сервере.

$csvRow = 'a,b,"c,d"';
$csvRow = mb_convert_encoding($csvRow, "UTF-8", "Windows-1251"); // или cp1251
file_put_content($file, $csvRow . PHP_EOL, FILE_APPEND);
Ответ написан
Комментировать
@oldzas
Попробуй iconv
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы