Jump to content

str_replace avec caractères accentués


Recommended Posts

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

Edited by doudy
Link to post
Share on other 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 ;)

Edited by Phobos
Link to post
Share on other 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é.

Link to post
Share on other 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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...