字符串编码问题-PHP

时间:2019-07-08 07:43:50

标签: php encoding utf-8 character-encoding

我需要将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 个答案:

答案 0 :(得分:1)

  

45746174209c75767265

此处的“ –”是9c,它指向用Windows-1252编码的字符串。 utf8_encodeISO-8859-1转换为UTF-8,因此您进行了错误的编码转换。正确的是:

mb_convert_encoding('Etat œuvre', 'UTF-8', 'CP1252')

答案 1 :(得分:-1)

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