Aller au contenu

str_replace avec caractères accentués


Sujets conseillés

Posté (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 !! :shutup:

Avez vous une idée?

Merci d'avance pour votre aide. :rolleyes:

Doudy

Modifié par doudy
Posté (modifié)
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
Posté

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

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

Veuillez vous connecter pour commenter

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



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