[Réglé] Problème avec ma fonction d'encodage de chaine

Problème avec ma fonction d'encodage de chaine [Réglé] - PHP - Programmation

Marsh Posté le 21-02-2007 à 18:59:42    

Salut !
 
J'ai un problème assez génant tout de même puisque ma fonction d'encodage de chaine ne fait pas tout à fait ce que je souhaite avoir...
 
En gros ma fonction enleve tout les caractères spéciaux mais aussi les accents de la chaine passée en paramètre.
Le problème, c'est que la fonction me renvoie une chaine assez bizarre comme si il y avait un problème d'encodage de caractère (UTF-8 / ISO).
 
Chaine avant la fonction : test des caractères spéciaux : éèçà$ù!ù*$^$:;,
Chaine après la fonction : test-des-caractn%EF%BF%BDres-spn%EF%BF%BDciaux-n%EF%BF%BDn%EF%BF%BDn%EF%BF%BDno$n%EF%BF%BD!n%EF%BF%BD*$%5E$
 
Voici mes fonctions qui me permette un sympatique encodage de chaine :
 

Code :
  1. function noaccents($chaine)
  2. {
  3.    return strtr($chaine,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" );
  4. }
  5. function encodage_url($url)
  6. {
  7. $origine = array('_', ' ', '\'', '"', '-:', ':', ';', ',');
  8. $replace = array('-', '-', '-', '', '', '', '', '');
  9. return strtolower(str_replace($origine, $replace, noaccents($url)));
  10. }


 
J'ai esseyé le utf8encode - utf8decode et toujours le même problème. Aurait-vous une idée du problème ?
 
Merci de votre aide !


Message édité par cvex le 22-02-2007 à 10:43:39
Reply

Marsh Posté le 21-02-2007 à 18:59:42   

Reply

Marsh Posté le 21-02-2007 à 19:18:08    

Là ça peut dépendre comment est encodé le fichier php ;)

Reply

Marsh Posté le 21-02-2007 à 19:20:13    

Tout est en utf-8

Reply

Marsh Posté le 21-02-2007 à 20:36:55    

Bonsoir,  
 
Voici une possibilité pour décoincer ton problème
 

Code :
  1. <?PHP
  2. // Définition des fonctions
  3. function noaccents($chaine)
  4. {
  5. $chaine = utf8_decode($chaine);
  6. $html = strtr($chaine,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" );
  7. return $html;
  8. }
  9. function encodage_url($url)
  10. {
  11.     $origine = array('_', ' ', '\'', '"', '-:', ':', ';', ',');
  12.     $replace = array('-', '-', '-', '', '', '', '', '');
  13.     $html =  strtolower(str_replace($origine, $replace, noaccents($url)));
  14.     return $html;
  15. }
  16. // Définition de la $chaine de test
  17. $chaine = "test des caractères spéciaux : éèçà$ù!ù*$^$:";
  18. // On l'encode en utf8
  19. $chaine = utf8_encode($chaine);
  20. Echo '-------------------------------------------------------------<br>';
  21. Echo '<b>Chaine Originale</b><br>';
  22. Echo $chaine;
  23. Echo '<br><br>-------------------------------------------------------------<br>';
  24. Echo '<b>Chaine que tu as obtenu (chez toi)</b><br>';
  25. Echo "test-des-caractn%EF%BF%BDres-spn%EF%BF%BDciaux-n%EF%BF%BDn%EF%BF%BDn%EF%BF%BDno$n%EF%BF%BD!n%EF%BF%BD*$%5E$";
  26. Echo '<br><br>-------------------------------------------------------------<br>';
  27. Echo '<b>Avec ta fonction noaccents</b><br>';
  28. Echo utf8_encode(noaccents($chaine));
  29. Echo '<br><br>-------------------------------------------------------------<br>';
  30. Echo '<b>Avec ta fonction noaccents + encodage_url</b><br>';
  31. Echo encodage_url(noaccents($chaine));
  32. Echo '<br><br>-------------------------------------------------------------<br>';
  33. Echo '<b>Avec ta fonction noaccents + la fonction PHP urlencode </b><br>';
  34. Echo urlencode(noaccents($chaine));
  35. ?>


la fonction PHP urlencode "est pratique pour transmettre des informations via une URL. C'est aussi un moyen de passer des informations d'une page à l'autre."
Plus d'infos sur la fonction en cliquant ici

Reply

Marsh Posté le 21-02-2007 à 21:35:47    

Justement je ne veux pas de urlencode (j'ai oublié de préciser).
Pourquoi je veux pas l'utiliser et bien parce que c'est pour de l'url rewriting. Cela dans le but d'un meilleur référencement.
 
Merci de ton aide :)

Reply

Marsh Posté le 21-02-2007 à 22:25:15    

cvex a écrit :

Justement je ne veux pas de urlencode (j'ai oublié de préciser).
Pourquoi je veux pas l'utiliser et bien parce que c'est pour de l'url rewriting. Cela dans le but d'un meilleur référencement.
 
Merci de ton aide :)


J'ai aussi légèrement changé ta fonction "noaccents", avec un petit utf8_decode au début.
 
Chez moi, ça fonctionne comme tu le souhaites avec une sortie comme ci-dessous :
-------------------------------------------------------------
Avec ta fonction noaccents + encodage_url
test-des-caracteres-speciaux-eeca!u*$^$

Reply

Marsh Posté le 22-02-2007 à 10:43:13    

C'est parfait merci Protohd !

 

Tu m'a mis sur la bonne voix, j'ai qu'en même du continuer à chercher comme il manquait encore quelques utf8_encode / utf8_decode.

 

Je donne la source corrigé (attention votre page doit avoir le header HTML en utf8 et doit être enregistrer en utf8) :

 
Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. </head>
  6. <body>
  7. <?php
  8. // Définition des fonctions
  9. function noaccents($chaine)
  10. {
  11. $chaine = utf8_decode($chaine);
  12. $html = strtr($chaine, utf8_decode('àâäåãáÂÄÀÅÃÁæÆçÇéèêëÉÊËÈïîìíÏÎÌÍñÑöôóòõÓÔÖÒÕ%u0161ùûüúÜÛÙÚýÿ%u017E'), utf8_decode('aaaaaaaaaaaaaacceeeeeeeeiiiiiiiinnoooooooooosuuuuuuuuyyz'));
  13. return utf8_encode($html);
  14. }
  15. function encodage_url($url)
  16. {
  17.    $origine = array('_', ' ', '\'', '"', '-:', ':', ';', ',', '$', '^', '*');
  18.    $replace = array('-', '-', '-', '', '', '', '', '', '', '', );
  19.    $html =  strtolower(str_replace($origine, $replace, noaccents($url)));
  20.    return $html;
  21. }
  22. // Définition de la $chaine de test
  23. $chaine = "test des caractères spéciaux : éèçà$ù!ù*$^$:";
  24. echo '-------------------------------------------------------------<br>';
  25. echo '<b>Chaine originale</b><br>';
  26. echo $chaine;
  27. echo '<br><br>-------------------------------------------------------------<br>';
  28. echo '<b>Fonction encodage URL + fonction qui enlève les accents</b><br>';
  29. echo encodage_url($chaine);
  30. ?>
  31. </body>
  32. </html>


Message édité par cvex le 22-02-2007 à 10:46:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed