编码mysql时出错 - >如何将其重新转换为其他内容?

den*_*xic 5 php mysql encoding character-encoding

我不久前在我的数据库和网站上使用错误的CHARSET创建了一个网站.HTML被设置为ISO ...而DB被设置为拉丁语...,页面被保存在西方拉丁语......一团糟.

该网站是法语,所以我创建了一个功能,取代所有口音,如"é"到" é".这暂时解决了这个问题.

我刚学到了很多关于编程的知识,现在我的文件保存为Unicode UTF-8,HTML是UTF-8,我的MySQL表列设置为ut8_encoding ...

我试图将重音移回"é"而不是" é",但是我在MySQL中和页面显示时都得到(?)或奇怪的字符"â"的常见字符集问题.

我需要找到一种方法来更新我的sql,通过一个清理字符串的函数,使它最终恢复正常.目前我的功能看起来像这样,但不起作用:

function stripAcc3($value){

 $ent =   array(
          'à'=>'à', 
          'â'=>'â', 
            'ù'=>'ù', 
          'û'=>'û',
            'é'=>'é', 
          'è'=>'è', 
          'ê'=>'ê', 
            'ç'=>'ç', 
            'Ç'=>'Ç', 
            "î"=>'î', 
            "Ï"=>'ï', 
            "ö"=>'ö', 
            "ô"=>'ô', 
            "ë"=>'ë', 
            "ü"=>'ü', 
            "Ä"=>'ä',
            "€"=>'€',
          "′"=> "'",
          "é"=> "é"
        );

    return strtr($value, $ent);
}
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助.提前致谢.如果您需要代码,请告诉我哪个部分.

UPDATE

如果您想获得赏金积分,我需要详细说明如何操作.谢谢.

Ali*_*xel 5

请尝试使用以下函数,它应该处理您描述的所有问题:

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;
}
Run Code Online (Sandbox Code Playgroud)

关于如何使用它的具体说明,我建议如下:

  1. 导出您的旧拉丁语数据库(我希望您仍然拥有它)内容作为SQL/CSV转储*
  2. 在文件内容上使用上述函数并将结果保存在另一个文件中
  3. 将您在上一步中生成的文件导入到UTF-8感知架构/数据库中

*示例:

file_put_contents('utf8.sql', makeStringUTF8(file_get_contents('latin.sql')));
Run Code Online (Sandbox Code Playgroud)

如果它不让我知道,这应该这样做.