Aller au contenu

str_replace avec caractères accentués


doudy

Sujets conseillés

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 !! :shutup:

Avez vous une idée?

Merci d'avance pour votre aide. :rolleyes:

Doudy

Modifié par doudy
Lien vers le commentaire
Partager sur d’autres sites

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 !! :shutup:

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é par Phobos
Lien vers le commentaire
Partager sur d’autres sites

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é.

Lien vers le commentaire
Partager sur d’autres sites

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 :whistling:

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...