Comment convertir 'u00e9' en un char utf8, en mysql ou en php?

je fais du nettoyage de données sur des données désordonnées qui sont importées dans mysql.

les données contiennent des' pseudo ' caractères unicodes, qui sont en fait inclus dans les chaînes comme 'u00e9' etc.

donc un champ pourrait être.. "Jalostotitlu00e1n" Je dois enlever ce maladroit 'u00e1n' et le remplacer par le caractère utf correspondant

je peux le faire dans l'un ou l'autre mysql, en utilisant substring et CHR peut-être, mais Im préprocssing les données via PHP, donc je pourrais faire il y aussi la.

je sais déjà tout sur la façon de configurer mysql et php pour fonctionner avec des données utf. Le problème est vraiment juste dans les im im im de données source.

Merci

11
demandé sur carpii 2011-08-15 07:02:41

3 réponses

il y a un moyen. Remplacer tous les uXXXX avec leur représentation HTML et faire un html_entity_decode()

I. e. echo html_entity_decode("Jalostotitlán");

chaque caractère UTF de la forme u1234 pourrait être imprimé en HTML comme ሴ. Mais faire un remplacement est assez difficile, parce qu'il pourrait y avoir beaucoup de faux positifs s'il n'y a pas d'autre char qui identifie le début d'une séquence UTF. Un simple regex pourrait être

preg_replace('/u([\da-fA-F]{4})/', '&#x;', $str)

11
répondu rabudde 2011-08-15 03:40:58

/* Fonction php pour convertir utf8 html en ansi * /

public static function Utf8_ansi($valor='') {

    $utf8_ansi2 = array(
    "\u00c0" =>"À",
    "\u00c1" =>"Á",
    "\u00c2" =>"Â",
    "\u00c3" =>"Ã",
    "\u00c4" =>"Ä",
    "\u00c5" =>"Å",
    "\u00c6" =>"Æ",
    "\u00c7" =>"Ç",
    "\u00c8" =>"È",
    "\u00c9" =>"É",
    "\u00ca" =>"Ê",
    "\u00cb" =>"Ë",
    "\u00cc" =>"Ì",
    "\u00cd" =>"Í",
    "\u00ce" =>"Î",
    "\u00cf" =>"Ï",
    "\u00d1" =>"Ñ",
    "\u00d2" =>"Ò",
    "\u00d3" =>"Ó",
    "\u00d4" =>"Ô",
    "\u00d5" =>"Õ",
    "\u00d6" =>"Ö",
    "\u00d8" =>"Ø",
    "\u00d9" =>"Ù",
    "\u00da" =>"Ú",
    "\u00db" =>"Û",
    "\u00dc" =>"Ü",
    "\u00dd" =>"Ý",
    "\u00df" =>"ß",
    "\u00e0" =>"à",
    "\u00e1" =>"á",
    "\u00e2" =>"â",
    "\u00e3" =>"ã",
    "\u00e4" =>"ä",
    "\u00e5" =>"å",
    "\u00e6" =>"æ",
    "\u00e7" =>"ç",
    "\u00e8" =>"è",
    "\u00e9" =>"é",
    "\u00ea" =>"ê",
    "\u00eb" =>"ë",
    "\u00ec" =>"ì",
    "\u00ed" =>"í",
    "\u00ee" =>"î",
    "\u00ef" =>"ï",
    "\u00f0" =>"ð",
    "\u00f1" =>"ñ",
    "\u00f2" =>"ò",
    "\u00f3" =>"ó",
    "\u00f4" =>"ô",
    "\u00f5" =>"õ",
    "\u00f6" =>"ö",
    "\u00f8" =>"ø",
    "\u00f9" =>"ù",
    "\u00fa" =>"ú",
    "\u00fb" =>"û",
    "\u00fc" =>"ü",
    "\u00fd" =>"ý",
    "\u00ff" =>"ÿ");

    return strtr($valor, $utf8_ansi2);      

}
10
répondu Sergio-MA-Brazil 2015-05-15 11:55:36

mon script de ligne de temps de twitter renvoie les caractères spéciaux comme é dans \u00e9 alors j'ai enlevé l'antislash et utilisé @rubbude son preg_replace.

// Fix uxxxx charcoding to html
$text = "De #Haarstichting is h\u00e9t medium voor alles Into:  De #Haarstichting is hét medium voor alles";
$str     = str_replace('\u','u',$text);
$str_replaced = preg_replace('/u([\da-fA-F]{4})/', '&#x;', $str);

echo $str_replaced;

ça marche pour moi et ça tourne: De #Haarstichting is h\u00e9t medium voor alles Dans: De #Haarstichting is hét medium voor alles

2
répondu Theo 2018-05-29 12:43:57