Fonction pour changer les caractères spéciaux

Eléphant du PHP | 331 Messages

19 mai 2008, 16:49

Bonjour,

Il m'arrive trop souvent que lorsque je développe le site d'un client en local les caractères accentués deviennent tous étrange a cause de la différence d'encodage de la BD du serveur du client.

D'habitude je corrige tout à la main.

Mais c'est parfois assez long!

Donc, je veux me faire une fonction qui change les caractères accentués en code html avant de les enregistrer dans la bd.

J'ai essasé ceci:

Fonction:
function change_caract_speciaux($var)
{
		$car_speciaux = array( 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
  		$car_speciaux = array( 'À', 'Á', 'Â', '&AtildeL;', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
		$var= str_replace($car_speciaux, $car_normaux, $var);  
		return $var;
}
Utilisation de ma fonction dans ma requête:
$sqlquery="INSERT INTO photos_categories VALUES('','".change_caract_speciaux(addslashes($_POST["nom_FR"]))."','".change_caract_speciaux(addslashes($_POST["description_FR"]))."','','','".addslashes($_POST["ord_affiche"])."','')" or die("Table introuvable");
Je ne recois aucun message d'erreur mais mes caractères ne sont pas changé.

Voyez-vous où est mon erreur???

Merci!

Mammouth du PHP | 1353 Messages

19 mai 2008, 16:55

As tu testé ta fonction change_caract_speciaux en dehors de SQL avec un simple
echo change_caract_speciaux("èéà");
As tu vérifié les valeurs de tes $_POST ?

Que donne un
echo $sqlquery;
?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 331 Messages

20 mai 2008, 00:47

Oup!!! l'erreure est toutes simple.

Regardez bien je n,ai pas déclaré ma variable $car_normaux car en faisant copier/coller j,ai déclaré 2 fois $car_speciaux à la place.

Voici le bon code pour ceux qui vive la même situation que moi avec les accents:
function change_caract_speciaux($var)
{
        $car_speciaux = array( 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
          $car_normaux = array( 'À', 'Á', 'Â', '&AtildeL;', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
        $var= str_replace($car_speciaux, $car_normaux, $var);  
        return $var;
} 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mai 2008, 00:50

Personnellement, pour encoder des caractères spéciaux en entités html, je préfère utiliser la fonction htmlentities() de php... :roll: ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 331 Messages

20 mai 2008, 02:46

Donc, je n'aurais seulement qu'a écrire:
$sqlquery="INSERT INTO photos_categories VALUES('','".htmlentities(addslashes($_POST["nom_FR"]))."','".htmlentities(addslashes($_POST["description_FR"]))."','','','".addslashes($_POST["ord_affiche"])."','')" or die("Table introuvable");
Sans utiliser autre chose?

Comme ça sa fou un réel bordel dans le code html généré par mon outils de mise en forme de texte wysywig