【问题标题】:Weird issue with encoding diacritics编码变音符号的奇怪问题
【发布时间】:2014-11-18 07:14:14
【问题描述】:

拜托,这不是重复的,我的问题不在于转换字母。

我从数据库中读取了一些值,其中一些包含一些奇怪的口音,例如“Piña_Colada”“Rhum_Arrangé”。我无法控制数据库,我想删除重音并将其替换为普通字母->“Pina_Colada”“Rhum_Arrange”

这是我在stackoverflow上找到的一种方法

function remove_acc($str){
$caracteres = array(
'À' => 'a', 'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ä' => 'a', '@' => 'a',
'È' => 'e', 'É' => 'e', 'Ê' => 'e', 'Ë' => 'e', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', '€' => 'e',
'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', 'Ï' => 'i', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Ö' => 'o', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'ö' => 'o',
'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'µ' => 'u',
'Œ' => 'oe', 'œ' => 'oe',
'ñ' => 'n',
'$' => 's');
$str = str_replace(" ", "_",$str);
$str = strtr($str,$caracteres);
echo $str // Piña_Colada
return $str;
}

...

while($row=mysql_fetch_object($requete))
        {

                $titre_recette = $row->titre; //with $row->titre = "Piña Colada"
                $titre_recette_photo = remove_acc($titre_recette);

                echo $titre_recette_photo;
        }

由于某些原因,它显示“Piña_Colada”...任何解决方案...?

在这里我们可以看到它与声明的 $string 一起工作:http://codepad.viper-7.com/psDpwb

它来自数据库,所以它可能以不同的方式编码吗? 在记事本++中,我在没有BOM的情况下使用utf-8

这是我的表格声明:

$sql = "CREATE TABLE IF NOT EXISTS Recettes (
    id_recette int(11) DEFAULT NULL,
    titre varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL";

【问题讨论】:

标签: php diacritics


【解决方案1】:

您可以尝试将字符串解码或编码为 UTF-8 吗?

我已将这一行添加到您的函数中:$str = utf8_encode($str); // 或者可能是 utf8_decode($str);

function remove_acc($str){
$caracteres = array(
'À' => 'a', 'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ä' => 'a', '@' => 'a',
'È' => 'e', 'É' => 'e', 'Ê' => 'e', 'Ë' => 'e', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', '€' => 'e',
'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', 'Ï' => 'i', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Ö' => 'o', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'ö' => 'o',
'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'µ' => 'u',
'Œ' => 'oe', 'œ' => 'oe',
'ñ' => 'n',
'$' => 's');
$str = str_replace(" ", "_",$str);
$str = utf8_encode($str); // or maybe utf8_decode($str);
$str = strtr($str,$caracteres);
echo $str // Piña_Colada
return $str;
}

【讨论】:

  • 好吧,它与 $str = utf8_encode($str);就像一个魅力......我想我已经尝试过了。我觉得我的问题很愚蠢,然后哈哈!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多