2011-08-24 3 views
0

Je reçois des données de la base de données codée en utf8. Mais d'une manière ou d'une autre, certaines anciennes données contiennent des caractères latin1.Détecter les caractères latin1 dans la chaîne utf8

Donc, ce

$encod = mb_detect_encoding($string, 'UTF-8', true); 

est toujours correcte.

Est-il sûr de toujours utiliser utf8_decode() pour vérifier les caractères latin1 comme 'äöüß' ???

$string = utf8_decode($string); 
$search = Array(" ", "ä", "ö", "ü", "ß", "."); //,"/Ä/","/Ö/","/Ü/"); 
$replace = Array("-", "ae", "oe", "ue", "ss", "-"); //,"Ae","Oe","Ue"); 
$string = str_replace($search, $replace, strtolower($string)); 

salutations

+1

que diriez-vous 'mb_detect_encoding ($ string, « ISO-8859-1, UTF -8 ', vrai); '? – ajreal

+0

@ajreal la chaîne que je reçois de la base de données est '¤ä¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'''''''' ce code (mb_detect_encoding) ($ this -> _ name,' ISO-8859-1, UTF-8 ', true); ' code' dit 'ISO-8859-1' et utf8_decode ($ chaîne) donne 'äääää', que dois-je faire? – spankmaster79

+1

essayer de rechercher iconv, mb conversion sur php manuel/SO, devrait avoir quelques questions discuter avant ici – ajreal

Répondre

-1

Il semble fonctionner sans utf8_encoding:

<?php 
    $string = "äöüß"; 
    $search = Array(" ", "ä", "ö", "ü", "ß", "."); //,"/Ä/","/Ö/","/Ü/"); 
    $replace = Array("-", "ae", "oe", "ue", "ss", "-"); //,"Ae","Oe","Ue"); 
    $string = str_replace($search, $replace, strtolower($string)); 
    echo $string; 
?> 

DEMO: http://codepad.org/HGTyHkBU

+1

je ne sais pas à quoi sert le -1, mais merci^_^ – Neal

+0

pas de moi ;-), mais aussi pas vraiment une bonne réponse car la chaîne que vous mettez dans $ chaîne dépend du codage de caractères du fichier que vous sauvegardez le code à. Mes données proviennent de la base de données et sont encodées en utf8 mais contiennent des caractères latin1 comme '¤¤¤¤¤¤ qui est utf8_decoded = äääää – spankmaster79

Questions connexes