Запишите строку ISO 8859-1 в файл с помощью fputs() в wordpress/PHP

У меня есть веб-сайт WordPress 4.9.8, работающий на PHP 7.0.22. Сайт использует кодировку UTF-8. Мне нужно вывести данные заказа в формате ISO 8859-1 на FTP-сервер нашего поставщика услуг. Я преобразовал данные с помощью utf8_decode(), прежде чем записывать их с помощью fputs(). Все это работало нормально.

Но вдруг - я думаю, после обновления wordpress - fputs больше не работает, если данные содержат немецкие символы умлаута. Например. если в данных есть 'Ä', который кодируется как 0xC4 в строке, то fputs ничего не записывает в файл, поэтому данные не экспортируются.

Мне кажется, что в fputs или где-то ниже или в системе есть проверка, все ли символы в строке являются допустимыми символами, и функция прерывается, если включен символ ISO 8859-1.

Это отрывок из моего кода:

    $stream  = fopen( 'php://output', 'w' );
    fputs( $stream, $header );  // working well
    $mytext = $this->get_row_csv( $row, $headers ); // get the order data
    $mytext1 = utf8_decode($mytext); // convert to ISO 8859-1
    fputs( $stream, $mytext1 ); // OK with no umlaut, fails if umlaut is included

Кто-нибудь знает, что изменилось в wordpress или почему fputs перестал работать с этими немецкими символами и что я могу сделать, чтобы написать правильно?


person Manfred    schedule 11.08.2018    source источник


Ответы (1)


encoding — преобразование символов utf8 в iso-88591 и обратно в PHP

Откройте верхнюю ссылку, это было бы полезно.

utf8_decode — Преобразует строку с символами ISO-8859-1, закодированными с помощью UTF-8, в однобайтовые символы ISO-8859-1.

utf8_encode — кодирует строку ISO-8859-1 в UTF-8.

person joki3    schedule 12.08.2018
comment
Спасибо за Ваш ответ. Однако проблема не в преобразовании строки, а в записи ее в файл. После успешного преобразования в is-8859-1 строка не может быть записана. fputs ничего не пишет, если строка содержит символ, отличный от utf8 (например, 0xC4 для Ä). - person Manfred; 13.08.2018
comment
Пожалуйста, попробуйте fopen в двоичном режиме fopen('file' 'wb'); $stream = fopen('php://output', 'wb'); - person joki3; 15.08.2018
comment
К сожалению, это не решает проблему. Тот же эффект, что и раньше. Если в строку включен символ, отличный от UTF8, вся строка не записывается. - person Manfred; 16.08.2018