doudy Posté 12 Mai 2008 Posté 12 Mai 2008 (modifié) Bonjour J'ai un petit problème avec la fonction str_replace(). Mon but est de remplacer les caractères accentués de chaînes destinées à être enregistrées dans une base MySQL. Voila ma fonction: Cette version avec caractère NON accentué marche bien: function strMod($var) { echo $var = str_replace("A", "X", $var); return $var; } ABC retourne XBC mais celle-ci avec un caractère ACCENTUE marche pas: function strMod($var) { echo $var = str_replace("à", "X", $var); return $var; } àBC retourne àBC Je pensais que ça venait de l'encodage UTF-8 ou ISO-8859-1 ? La chaîne de caractères $str provient d'un formulaire de saisie et est destinée à être enregistrée dans une table MySQL encodé en UTF-8. Toutefois, si je cherche à savoir l'encodage de $str par la fonction mb_detect_encoding($str , 'UTF-8, ISO-8859-1'); j'ai soit UTF-8 ou ISO-8859-1 de façon aléatoire .... c'est à rien y comprendre !! Avez vous une idée? Merci d'avance pour votre aide. Doudy Modifié 12 Mai 2008 par doudy
Phobos Posté 12 Mai 2008 Posté 12 Mai 2008 (modifié) Toutefois, si je cherche à savoir l'encodage de $str par la fonctionmb_detect_encoding($str , 'UTF-8, ISO-8859-1'); j'ai soit UTF-8 ou ISO-8859-1 de façon aléatoire .... c'est à rien y comprendre !! Si une chaîne ISO-8859-1 ne contient pas de caractères particuliers au charset (pas d'accents par ex), elle est identique à cette même chaîne en utf8 ; c'est peut être pour ça que la détection renvoi parfois du UTF-8. A mon avis tu devrais juste faire echo $var = utf8_encode(str_replace(utf8_decode("àBC"), "X", $var)); dans ta fonction Modifié 12 Mai 2008 par Phobos
Ifmy Posté 12 Mai 2008 Posté 12 Mai 2008 J'essaye toujours de revenir à la base car les problèmes viennent souvent de là. Pourquoi vouloir remplacer les caractères accentués ? Le document d'origine est en utf-8 ainsi que son charset ? la base l'étant aussi, pas de souci. Le document d'origine est en iso ainsi que son charset ? utf8_encode(); is your friend Ensuite le traitement est surtout lié à des notions de sécurité.
doudy Posté 13 Mai 2008 Auteur Posté 13 Mai 2008 Si une chaîne ISO-8859-1 ne contient pas de caractères particuliers au charset (pas d'accents par ex), elle est identique à cette même chaîne en utf8 ; c'est peut être pour ça que la détection renvoi parfois du UTF-8.A mon avis tu devrais juste faire echo $var = utf8_encode(str_replace(utf8_decode("àBC"), "X", $var)); dans ta fonction Merci pour tes explications, Phobos. Avec ... utf8_encode(str_replace(utf8_decode ... j'arrive à mes fins ! Voici maintenant ma nouvelle fonction, c'est un peu lourd mais ça marche Cette fonction convertit un nom en MAJUSCULE sans accent : function strToNoAccent($var) { $modif = str_replace( array( utf8_decode('à'), utf8_decode('â'), utf8_decode('ä'), utf8_decode('á'), utf8_decode('ã'), utf8_decode('å'), utf8_decode('î'), utf8_decode('ï'), utf8_decode('ì'), utf8_decode('í'), utf8_decode('ô'), utf8_decode('ö'), utf8_decode('ò'), utf8_decode('ó'), utf8_decode('õ'), utf8_decode('ø'), utf8_decode('ù'), utf8_decode('û'), utf8_decode('ü'), utf8_decode('ú'), utf8_decode('é'), utf8_decode('è'), utf8_decode('ê'), utf8_decode('ë'), utf8_decode('ç'), utf8_decode('ÿ'), utf8_decode('ñ'), utf8_decode('À'), utf8_decode('Â'), utf8_decode('Ä'), utf8_decode('Á'), utf8_decode('Ã'), utf8_decode('Å'), utf8_decode('Î'), utf8_decode('Ï'), utf8_decode('Ì'), utf8_decode('Í'), utf8_decode('Ô'), utf8_decode('Ö'), utf8_decode('Ò'), utf8_decode('Ó'), utf8_decode('Õ'), utf8_decode('Ø'), utf8_decode('Ù'), utf8_decode('Û'), utf8_decode('Ü'), utf8_decode('Ú'), utf8_decode('É'), utf8_decode('È'), utf8_decode('Ê'), utf8_decode('Ë'), utf8_decode('Ç'), utf8_decode(''), utf8_decode('Ñ'), ), array( 'a', 'a', 'a', 'a', 'a', 'a', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'e', 'e', 'e', 'e', 'c', 'y', 'n', 'A', 'A', 'A', 'A', 'A', 'A', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'E', 'E', 'E', 'E', 'C', 'Y', 'N', ),$var); $var=utf8_encode($modif); return $var; }$ceciestlenom = strtoupper(strToNoAccent($ceciestlenom)); // Convertit le nom en MAJUSCULE sans accent Merci pour votre aide. Doudy
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant