我收到了这个数据库,里面有法文的人名和数据,这意味着,使用诸如 é、è、ö、û 等字符。大约 3000 个条目。
显然,里面的数据有时使用 utf8_encode() 编码,有时没有。这会导致输出混乱:在某些地方,字符显示得很好,而在其他地方则没有。
起初我试图追踪 UI 中出现这些问题的每个地方,并在必要时使用 utf8_decode() ,但这确实不是一个可行的解决方案。
我做了一些测试,首先没有理由使用 utf8_encode,所以我宁愿删除所有这些,只在任何地方使用 UTF8 - 在浏览器、中间件和数据库级别。所以我需要清理数据库,通过清理后的版本转换所有错误编码的数据。
问题:是否有可能在 php 中创建一个函数来检查 utf8 字符串是否正确编码(没有 utf8_encode)或没有(使用 utf8_encode),如果是,将其转换回其原始状态?
换句话说:我想知道如何将已经是 utf8_encode() 的 utf8 内容检测到不是 utf8_encode()d 的 utf8 内容。
**更新:示例**
这是一个很好的示例:您获取一个充满特殊字符的字符串,并获取该字符串的副本并使用 utf8_encode() 它。我梦寐以求的函数需要两个字符串,第一个字符串保持不变,第二个字符串现在与字符串一个相同。
我试过这个:
$loc_fr = setlocale(LC_ALL, 'fr_BE.UTF8','fr_BE@euro', 'fr_BE', 'fr', 'fra', 'fr_FR');
$str1= "éèöûêïà ";
$str2 = utf8_encode($str1);
function convert_charset($str) {
$charset= mb_detect_encoding($str);
if( $charset=="UTF-8" ) {
return utf8_decode($str);
}
else {
return $str;
}
}
function correctString($str) {
echo "\nbefore: $str";
$str= convert_charset($str);
echo "\nafter: $str";
}
correctString($str1);
echo('<hr/>'."\n");
correctString($str2);
这给了我:
before: éèöûêïà after: �������
before: éèöûêïà after: éèöûêïà
谢谢,
亚历克斯