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
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)
/* 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);
}
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