我不久前在我的数据库和网站上使用错误的CHARSET创建了一个网站. HTML被设置为ISO …而DB被设置为拉丁语…,页面被保存在西方拉丁语……一团糟.
该网站是法语,所以我创建了一个功能,将所有重音如“é”替换为“& eacute;”.这暂时解决了这个问题.
我刚学到了很多关于编程的知识,现在我的文件保存为Unicode UTF-8,HTML是UTF-8,我的MySQL表列设置为ut8_encoding …
我试图将重音移回“é”而不是“& eacute;”,但是我在MySQL和页面显示时都会遇到(?)或奇怪的字符“â”的常见字符集问题.
我需要找到一种方法来更新我的sql,通过一个清理字符串的函数,使它最终恢复正常.目前我的功能看起来像这样,但不起作用:
function stripAcc3($value){
$ent = array(
'à'=>'à',
'â'=>'â',
'ù'=>'ù',
'û'=>'û',
'é'=>'é',
'è'=>'è',
'ê'=>'ê',
'ç'=>'ç',
'Ç'=>'Ç',
"î"=>'î',
"Ï"=>'ï',
"ö"=>'ö',
"ô"=>'ô',
"ë"=>'ë',
"ü"=>'ü',
"Ä"=>'ä',
"€"=>'€',
"′"=> "'",
"é"=> "é"
);
return strtr($value, $ent);
}
欢迎任何帮助.提前致谢.如果您需要代码,请告诉我哪个部分.
UPDATE
如果您想获得赏金积分,我需要详细说明如何操作.谢谢.
最佳答案:
请尝试使用以下函数,它应该处理您描述的所有问题:
function makeStringUTF8($data)
{
if (is_string($data) === true)
{
// has html entities?
if (strpos($data, '&') !== false)
{
// if so, revert back to normal
$data = html_entity_decode($data, ENT_QUOTES, 'UTF-8');
}
// make sure it's UTF-8
if (function_exists('iconv') === true)
{
return @iconv('UTF-8', 'UTF-8//IGNORE', $data);
}
else if (function_exists('mb_convert_encoding') === true)
{
return mb_convert_encoding($data, 'UTF-8', 'UTF-8');
}
return utf8_encode(utf8_decode($data));
}
else if (is_array($data) === true)
{
$result = array();
foreach ($data as $key => $value)
{
$result[makeStringUTF8($key)] = makeStringUTF8($value);
}
return $result;
}
return $data;
}
关于如何使用它的具体说明,我建议如下:
>导出您的旧拉丁数据库(我希望您仍然拥有它)内容作为SQL / CSV转储*
>在文件内容上使用上述功能,并将结果保存在另一个文件中
>将您在上一步中生成的文件导入到UTF-8感知架构/数据库中
*示例:
file_put_contents('utf8.sql', makeStringUTF8(file_get_contents('latin.sql')));
如果它不让我知道,这应该这样做.
标签:php,mysql,encoding,character-encoding
来源: https://codeday.me/bug/20190515/1109073.html