Странная проблема с кодировкой диакритических знаков

Пожалуйста, это не дублируется, моя проблема не в преобразовании письма.

Я читаю некоторые значения из базы данных, и некоторые из них содержат какой-то странный акцент, такой как «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» по некоторым причинам … любое решение …?

Здесь мы видим, что он работает с объявленной строкой: http://codepad.viper-7.com/psDpwb

он исходит из БД, так может ли он быть закодирован по-другому?
В блокноте ++ я работаю в 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";

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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]