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

У меня есть сайт 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 перестала работать с этими немецкими символами и что я могу сделать, чтобы написать правильно?

0

Решение

кодирование — конвертировать utf8-символы в iso-88591 и обратно в PHP

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

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

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

0

Другие решения

$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');
-1

По вопросам рекламы [email protected]