PHP caractères accentués

gmarie08 Messages postés 5 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 16 octobre 2008 - 14 oct. 2008 à 21:45
gmarie08 Messages postés 5 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 16 octobre 2008 - 16 oct. 2008 à 19:14
Bonsoir,

J'ai un formulaire qui me permet de saisir (entre autre un prénom).
Aujourd'hui, j'ai eu le cas d'un "rené".
Ce caractère accentué me pourrit la vie car il n'est pas reconnu dans mes routines. PHP me dit que la longueur de ma chaîne est  5 ???
Si je teste caractère par caractère j'obtiens des caractères qui ne s'affichent pas...

Voici ma function :
function correc ($c)
{
   $c = ereg_replace("[áåâäàã]","a",$c);
   $c = ereg_replace("ç","c",$c);
   $c = ereg_replace("[êéèë]","e",$c);
   $c = ereg_replace("[íîïì]","i",$c);
   $c = ereg_replace("[óôöòõ]","o",$c);
   $c = ereg_replace("[ûüùú]","u",$c);
   $c = ereg_replace("ñ","n",$c);
   $c = ereg_replace("[ÿý]","y",$c);
   $c = ereg_replace("[ÁÅÂÄÀÃ]","A",$c);
   $c = ereg_replace("Ç","C",$c);
   $c = ereg_replace("[ÊÉÈË]","E",$c);
   $c = ereg_replace("[ÍÎÏÌ]","I",$c);
   $c = ereg_replace("[ÓÔÖÒÕ]","O",$c);
   $c = ereg_replace("[ÛÜÙÚ]","U",$c);
   $c = ereg_replace("Ñ","N",$c);
   $c = ereg_replace("Ý","Y",$c);
   return $c;
}

Voici l'appel à la function :

$chain2 = correc ($chaine);

Avant j'ai "rené", après j'ai "renae"...

J'ai essayé un tas de méthodes et aucune n'a solutionné mon problème.
Pouvez-vous m'aider ?
Merci par avance

Amateur éclairé

8 réponses

Bling 182 Messages postés 510 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 5 juillet 2009 3
14 oct. 2008 à 22:53
T'as essayé la méthode d'envoyer les bon headers et mettre les bons metas ?

http-equiv, content-type et encoding a tout hasard.
0
gmarie08 Messages postés 5 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 16 octobre 2008
14 oct. 2008 à 23:05
Merci de votre réponse,

Voici mes header et meta, je les crois corrects !

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Amateur éclairé
0
Bling 182 Messages postés 510 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 5 juillet 2009 3
14 oct. 2008 à 23:08
il est bon aussi généralement d'envoyer un
header('Content-type:text/html;encoding=iso-8859-1');

Mais bon, en iso-8859-1, il n'y a pas d'accents... il faut prendre 15, ou alors utf-8
0
gmarie08 Messages postés 5 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 16 octobre 2008
14 oct. 2008 à 23:23
J'ai remplacé ISO-8859-1 par UTF-8 : le résultat est le même

Amateur éclairé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jadu Messages postés 217 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 16 août 2018
16 oct. 2008 à 11:14
Quelle version de PHP ?

moi je n'ai pas ce type de souci avec mes formulaires ! mais je compâti [javascript:Insert_Emoticon('/imgs2/smile_approve.gif'); ]!!! et ma foi cela peut m'arriver, voilà pourquopi je pose la question !
merci[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]

Prenez bien soin de vous.</sup>
0
gmarie08 Messages postés 5 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 16 octobre 2008
16 oct. 2008 à 12:11
Je possède PHP 5.2.6 actuellement... En fait ce que je voudrais c'est que mes caractères accentués soient systématiquement remplacés par des caractères non accentués, c'est tout !
Merci de votre obligeance

Amateur éclairé
0
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
16 oct. 2008 à 18:36
Bonjour,

Un caractère qui se transforme en deux est toujours symptomatique d'une conversion en UTF-8 non gérée. Avant de passer ton champs à ta fonction, fais la passer par la fonction utf8_decode(). Je pense que ça réglera ton problème.

Aussi,  je te proposerai ça comme fonction, je pense que c'est plus propre ;)

function

Correct($str)
{

      $b =
'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ';

      $r =
'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';

      return




strtr

(


$str

,


$b

,


$r

);
}

Ordinastie.
0
gmarie08 Messages postés 5 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 16 octobre 2008
16 oct. 2008 à 19:14
Merci beaucoup Ordinastie,

J'ai réalisé la manip'.
Il y a une amélioration car on passe de 2 caractères à 1 mais le caractère transformé est = ? ... et toujours pas affichable !
Ca avance
Amicalement,

Amateur éclairé
0
Rejoignez-nous