У меня есть сайт 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 перестала работать с этими немецкими символами и что я могу сделать, чтобы написать правильно?
кодирование — конвертировать utf8-символы в iso-88591 и обратно в PHP
Откройте верхнюю ссылку, это было бы полезно.
utf8_decode — Преобразует строку с символами ISO-8859-1, кодированными с помощью UTF-8, в однобайтовый ISO-8859-1.
utf8_encode — кодирует строку ISO-8859-1 в UTF-8
$utf8 = 'ÄÖÜ'; // file must be UTF-8 encoded
$iso88591_1 = utf8_decode($utf8);
$iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8);
$iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');
$iso88591 = 'ÄÖÜ'; // file must be ISO-8859-1 encoded
$utf8_1 = utf8_encode($iso88591);
$utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591);
$utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1');