Проблема строкового кодирования - PHP - PullRequest
1 голос
/ 08 июля 2019

Мне нужно сохранить имя столбца из CSV-файла в MySQL DB, В PHP я использовал для преобразования строки в формат utf8_encode. это не работает для некоторой строки,

$name = "Téléphone"
echo utf8_encode($name); // it works

output : Téléphone

$name = "Etat œuvre"
echo utf8_encode($name); // it does not works

output : Etat Å?uvre

Для тестирования:

echo bin2hex($name);
output: 45746174209c75767265

Ответы [ 2 ]

1 голос
/ 08 июля 2019

45746174209c75767265

Здесь «œ» - это 9c, что указывает на кодируемую строку в Windows-1252 . utf8_encode конвертирует из ISO-8859-1 в UTF-8, поэтому вы выполняете неправильное преобразование кодировки. Правильный:

mb_convert_encoding('Etat œuvre', 'UTF-8', 'CP1252')
0 голосов
/ 08 июля 2019

utf8_encode не «правильный инструмент» для этой задачи.Попробуйте mb_convert_encoding вместо.

Пример:

function encodeUtf8(string $data): string
{
    if (!mb_check_encoding($data, 'UTF-8')) {
        return mb_convert_encoding($data, 'UTF-8');
    }

    return $data;
}

echo encodeUtf8('Téléphone'); // Téléphone
echo encodeUtf8('Etat œuvre'); // Etat œuvre
...