Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1628 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1517918
cvex
$CveX
Posté le 21-02-2007 à 18:59:42  profilanswer
 

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
mood
Publicité
Posté le 21-02-2007 à 18:59:42  profilanswer
 

n°1517926
FlorentG
Unité de Masse
Posté le 21-02-2007 à 19:18:08  profilanswer
 

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

n°1517928
cvex
$CveX
Posté le 21-02-2007 à 19:20:13  profilanswer
 

Tout est en utf-8

n°1517974
Protohd
Posté le 21-02-2007 à 20:36:55  profilanswer
 

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

n°1517993
cvex
$CveX
Posté le 21-02-2007 à 21:35:47  profilanswer
 

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 :)

n°1518006
Protohd
Posté le 21-02-2007 à 22:25:15  profilanswer
 

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*$^$

n°1518160
cvex
$CveX
Posté le 22-02-2007 à 10:43:13  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[MySql]Probleme requete interval date début- date fin pour réservationProblème d'accent dans ma base de donnée
[PHP] fonction exec() et droitsprobleme simple de profondeur
Caractère à probleme... [Vbasic.Net]probleme de liens etrange
Un ControlToValidate (composant .net) qui pointe vers une fonctionChaine
Problème avec tableau dynamique à deux dimensions 
Plus de sujets relatifs à : [Réglé] Problème avec ma fonction d'encodage de chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR