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

  FORUM HardWare.fr
  Programmation
  PHP

  [résolu] strtr renvoie des caractères farfelus (UTF-8)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] strtr renvoie des caractères farfelus (UTF-8)

n°1929484
alx067
Posté le 06-10-2009 à 18:10:15  profilanswer
 

J'utilise la fonction strtr pour donner un nom à mes forums à partir du sujet.
Exemple :
 - sujet = Quel temps fait-il aujourd'hui ?
 - dossier du sujet = quel_temps_fait_il_aujourd_hui__
 
Avec les accents (é, à, è, etc.), la fonction suivante me renvoie des caractères farfelus.
Exemple :
 - é devient a_
 - à devient a_
 - etc.
 

Code :
  1. // On enlève les accents
  2. $dossier = $sujet;
  3. $dossier = strtr($dossier,
  4. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  5. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  6. // Remplacer les caracteres autres que lettres et chiffres par _
  7. $dossier = preg_replace('/([^a-z0-9]+)/i', '_', $dossier);
  8. // Remplacer les majuscules par des minuscules
  9. $dossier = strtolower($dossier);


 
Quel est le problème ? J'utilise le jeu de caractères UTF-8


Message édité par alx067 le 07-04-2010 à 20:56:04
mood
Publicité
Posté le 06-10-2009 à 18:10:15  profilanswer
 

n°1929640
FlorentG
Unité de Masse
Posté le 07-10-2009 à 10:20:34  profilanswer
 

Justement strtr va prendre tes caractères comme de l'ISO, donc ça va péter. Genre si tu fais juste :

Code :
  1. strtr($dossier, 'é', 'e');


strtr va le voir comme ça :

Code :
  1. strtr($dossier, 'é', 'e');


Du coup *boom*.

 

Il faut utiliser un tableau :

Code :
  1. strtr($dossier, array(
  2. 'À' => 'A',
  3. ...
  4. 'é' => 'e',
  5. ...
  6. 'ÿ' => 'y'));


Message édité par FlorentG le 07-10-2009 à 10:20:49
n°1930854
alx067
Posté le 10-10-2009 à 15:08:21  profilanswer
 

J'ai tenté avec ce bout de code :  

Code :
  1. $f = strtr($f, array("é"=>"e","è"=>"e" ));


 
Mais rien ne se passe...
 
J'ai certainement fait une erreur.


Message édité par alx067 le 10-10-2009 à 15:35:23
n°1935454
alx067
Posté le 26-10-2009 à 16:05:42  profilanswer
 

Quelqu'un ?
 
 :??:

n°1935685
stealth35
Posté le 27-10-2009 à 14:12:53  profilanswer
 

http://www.weirdog.com/blog/php/su [...] n_php.html


Message édité par stealth35 le 27-10-2009 à 14:13:04
n°1937290
alx067
Posté le 03-11-2009 à 15:26:15  profilanswer
 

Je vais voir çà ce soir...

n°1937349
gustoune
Posté le 03-11-2009 à 18:09:40  profilanswer
 

alx067 a écrit :

Je vais voir çà ce soir...


 
 
penser aussi aux format d'encodage avant de faire ton script :
 
utf8_encode()
utf8_decode()
 
ou dans les fonctions :
exemple pour htmlentities()
 
htmlentities($string),
 devient pour le mettre en utf8  
htmlentities($string, ENT_QUOTES, 'utf-8'); (je crois)
 
bref il doit avoir les meme attributs de fonction avec strtr...

n°1939693
alx067
Posté le 11-11-2009 à 16:24:29  profilanswer
 

utf8_encode() et utf8_decode() renvoient des caractères farfelus qui n'ont rien à voir avec UTF-8 (hébergeur Free), et htmlentities avec les spécifications utf-8 renvoie de ISO courant...
 
Je persévère

n°1939698
stealth35
Posté le 11-11-2009 à 16:41:40  profilanswer
 

verifie bien l'encodage natifs des fichiers

n°1939701
alx067
Posté le 11-11-2009 à 17:08:45  profilanswer
 

L'entête des page est en UTF-8 :  

Code :
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


et j'ai rajouté cette ligne pour le PHP

Code :
  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3. ?>

Message cité 1 fois
Message édité par alx067 le 11-11-2009 à 17:09:52
mood
Publicité
Posté le 11-11-2009 à 17:08:45  profilanswer
 

n°1939702
alx067
Posté le 11-11-2009 à 17:11:50  profilanswer
 

Normal à ISO (htmlentities):
é --> &eacute;
 
Normal à UTF-8 (?):
é --> &#233;
 
ISO à UTF-8 (?):
&eacute; --> &#233;


Message édité par alx067 le 11-11-2009 à 17:17:42
n°1939707
stealth35
Posté le 11-11-2009 à 17:32:25  profilanswer
 

alx067 a écrit :

L'entête des page est en UTF-8 :  

Code :
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


et j'ai rajouté cette ligne pour le PHP

Code :
  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3. ?>



 
meme, si ton fichier est encoder en ansi a la base, ca va foutre la merde, regarde dans ton editeur qu'elle encodage a ton fichier, apres si tu travail avec mysql, c'est pareil faut verifié que la connexion est en utf8 et que tes table soit en utf8, il suffis que y'en est un qui diffère dans l'histoire pour que ca marche pas

n°1939725
alx067
Posté le 11-11-2009 à 18:25:45  profilanswer
 

D'autres problèmes
 

Code :
  1. $sujet = "ééééé";
  2. echo "$sujet<br />";
  3. $dossier = strtr($sujet,
  4. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  5. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  6. echo "$dossier<br />";


 
Affiche :  
ééééé
y�y�y�y�y�


Message édité par alx067 le 11-11-2009 à 18:26:11
n°1939758
stealth35
Posté le 11-11-2009 à 20:12:03  profilanswer
 

t'avai té voir la technique pour enlevé les accent  dans le liens que je t'ai passé ?

n°1939783
alx067
Posté le 11-11-2009 à 21:13:23  profilanswer
 

Je suis allé, mais le résultat me sort des caractères farfelus (A�A�A�A�A�A�A�A�A�A�)...
 
J'y arrive avec une autre méthode...

Code :
  1. <?php
  2. $remplacements = array(
  3. " " => "_",
  4. "!" => "_",
  5. '"' => "_",
  6. "#" => "_",
  7. "$" => "_",
  8. "%" => "_",
  9. "&" => "_",
  10. "'" => "_",
  11. "(" => "_",
  12. " )" => "_",
  13. "*" => "_",
  14. "+" => "_",
  15. "," => "_",
  16. "-" => "-",
  17. "." => "_",
  18. "/" => "_",
  19. ":" => "_",
  20. ";" => "_",
  21. "<" => "_",
  22. "=" => "_",
  23. ">" => "_",
  24. etc....
  25. );
  26. $f = strtr($f, $remplacements);
  27. ?>


 
Cependant au-delà d'un certanim nombre de données, les caractères sont mals ou pas remplacés...


Message édité par alx067 le 11-11-2009 à 22:30:33
n°1940008
alx067
Posté le 12-11-2009 à 14:16:04  profilanswer
 

Où pourrais je trouver un spécialité des conversion ISO, UTF-8 ?
 
SVP, là je cale...

n°1940029
kao98
...
Posté le 12-11-2009 à 14:26:58  profilanswer
 

Tu as vérifié l'encodage de tes fichiers !??


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1940031
FlorentG
Unité de Masse
Posté le 12-11-2009 à 14:27:51  profilanswer
 

Ouais y'a un problème d'encodage de fichiers là, il faut qu'ils soient en utf-8 aussi

n°1940032
stealth35
Posté le 12-11-2009 à 14:29:20  profilanswer
 

marche tres bien ca moi

Code :
  1. function remove_accents($str, $charset='utf-8')
  2.     {
  3.         $str = htmlentities($str, ENT_NOQUOTES, $charset);
  4.         
  5.         $str = preg_replace('#\&amp;([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
  6.         $str = preg_replace('#\&amp;([A-za-z]{2})(?:lig)\;#', '\1', $str);
  7.         $str = preg_replace('#\&amp;[^;]+\;#', '', $str);
  8.         
  9.         return $str;
  10.     }
  11.     
  12.     $str = 'éééééééééé';
  13.     
  14.     echo remove_accents($str);


Message édité par stealth35 le 12-11-2009 à 14:34:45
n°1940033
FlorentG
Unité de Masse
Posté le 12-11-2009 à 14:33:12  profilanswer
 

Moi j'ai un truc du style :

Code :
  1. $url =
  2.      preg_replace('/-{2,}/', '-',
  3.      preg_replace('/[^a-z0-9-_]/', '',
  4.      str_replace(array(' ', ',', ':', ';', '/', '\'', '\\'), '-',
  5.      strtolower(
  6.      iconv('utf-8', 'us-ascii//TRANSLIT',
  7.      iconv('utf-8', 'utf-8//IGNORE', $str))))));


Message édité par FlorentG le 12-11-2009 à 14:33:56
n°1940036
alx067
Posté le 12-11-2009 à 14:37:22  profilanswer
 

Je verrais çà ce soir...
 
Merci, parce que là je désespère.


Message édité par alx067 le 12-11-2009 à 14:37:46
n°1940037
stealth35
Posté le 12-11-2009 à 14:37:34  profilanswer
 

sinon pour ceux qui veulent pas se faire chié
 

Code :
  1. filter_var($url, FILTER_SANITIZE_URL);

n°1940038
FlorentG
Unité de Masse
Posté le 12-11-2009 à 14:38:44  profilanswer
 

filter_var garde trop de trucs [:sadnoir]

n°1940039
stealth35
Posté le 12-11-2009 à 14:40:51  profilanswer
 

FlorentG a écrit :

filter_var garde trop de trucs [:sadnoir]


 
oui mais t'as une url valide, apres c'est sur c'est moins joli

n°1940042
alx067
Posté le 12-11-2009 à 14:47:00  profilanswer
 

En réalité, il me faudrait les fonctions suivantes :  
 
Normal --> UTF-8
ISO --> UTF-8
Normal --> "normal sans accents, sans majuscules sans espaces, sans ponctuations et avec un nombre de caractères limités" (pour le nom des dossiers et fichiers)
UTF-8 --> Normal
UTF-8 --> "Normal sans accents" (problème d'affichage dans certains logiciels)
 
J'utilisais les fonctions strtr et strtr_replace mais elle renvoie parfois des caractères "farfelus". Je cherche des fonctions stables, rapides et fonctionne sous différents hébergeurs pour un site qui me servira d'architecture.
 
 
Au cas où un génie des charsets passe par ici.


Message édité par alx067 le 12-11-2009 à 14:48:39
n°1940043
FlorentG
Unité de Masse
Posté le 12-11-2009 à 14:47:51  profilanswer
 

Normal ça existe pas :o Quelle différence entre normal et iso ? Tu veux peux-être dire ASCII ?

n°1940045
alx067
Posté le 12-11-2009 à 14:51:04  profilanswer
 

Oui (normal = différence ; ASCII = différence)
 
 :D


Message édité par alx067 le 12-11-2009 à 14:54:17
n°1940817
alx067
Posté le 14-11-2009 à 19:49:22  profilanswer
 

J'ai essayé vos solutions, sans succés...
J'ai toujours les mêmes caractères farfelus... (éé)
[:creal]
 
Un autre point de détails... Au cours de mes lectures j'ai fait la découverte de "UTF-8" et "UTF-8 sans BOM" pour le format des pages PHP.
Quelle est la différence ?
 
Pour le reste, je suis ouvert à tous vos conseils...


Message édité par alx067 le 14-11-2009 à 19:55:25
n°1941551
kao98
...
Posté le 17-11-2009 à 13:29:19  profilanswer
 

stealth35 a écrit :

verifie bien l'encodage natifs des fichiers


stealth35 a écrit :


 
meme, si ton fichier est encoder en ansi a la base, ca va foutre la merde, regarde dans ton editeur qu'elle encodage a ton fichier, apres si tu travail avec mysql, c'est pareil faut verifié que la connexion est en utf8 et que tes table soit en utf8, il suffis que y'en est un qui diffère dans l'histoire pour que ca marche pas


kao98 a écrit :

Tu as vérifié l'encodage de tes fichiers !??


FlorentG a écrit :

Ouais y'a un problème d'encodage de fichiers là, il faut qu'ils soient en utf-8 aussi


 
Tu le fais exprès ou quoi ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1981728
alx067
Posté le 07-04-2010 à 20:54:14  profilanswer
 

OK, j'ai réussi à me dépatouiller avec les encodages.
1. J'utilise Notepad ++ et choisi l'encodage souhaité dans les options d'encodage (UTF-8 semble être la meilleure solution, il existe plus puissant mais plus lent ; UTF-16 et UTF-32). Il fallait préciser où définir l'encodage (en ligne de commande, dans l'éditeur de texte, dans le code PHP, dans le code HTML)...!
2. L'affichage de mes codes est maintenant correcte. Penser à indiquer le charset utilisé dans l'en-tête  HTML (exemple : <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=utf-8"> )
 
Désolé pour le retard, le problème est résolu.
 
Un lien utile est certainement connu : http://electron-libre.fassnet.net/utf8.php (en bas de page)


Message édité par alx067 le 07-04-2010 à 20:58:53
n°1983761
the_bigboo
Posté le 13-04-2010 à 21:29:43  profilanswer
 

En tout cas jusque la sortie officielle de PHP 6, le noyau de PHP travaille en ISO. J'ai eu le même problème. Il faut juste donner des variables ISO en entrées que tu pourras remettre en utf8 par la suite pour que ce soit transparent.

Message cité 1 fois
Message édité par the_bigboo le 13-04-2010 à 21:29:51
n°1983811
stealth35
Posté le 14-04-2010 à 10:10:35  profilanswer
 

the_bigboo a écrit :

En tout cas jusque la sortie officielle de PHP 6, le noyau de PHP travaille en ISO. J'ai eu le même problème. Il faut juste donner des variables ISO en entrées que tu pourras remettre en utf8 par la suite pour que ce soit transparent.


 
PHP6 c'est abandonnée  :sweat:

n°1983993
the_bigboo
Posté le 14-04-2010 à 16:19:18  profilanswer
 

Tu tiens ça d'ou ?

n°1984001
stealth35
Posté le 14-04-2010 à 16:31:22  profilanswer
 
n°1984034
drasche
Posté le 14-04-2010 à 17:56:02  profilanswer
 

stealth35 a écrit :

PHP6 c'est abandonnée  :sweat:


L'implémentation UTF8 telle que prévue est abandonnée [:aloy]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1984054
stealth35
Posté le 14-04-2010 à 20:09:03  profilanswer
 

drasche a écrit :


L'implémentation UTF8 telle que prévue est abandonnée [:aloy]


 
oui, elle est dans une autre branch, et de ce fait la branch php6 n'existe plus  
http://svn.php.net/repository/php/php-src/branches/

n°1984064
drasche
Posté le 14-04-2010 à 20:34:11  profilanswer
 

Je connais les détails techniques de l'histoire :o
 
Et elle existera à nouveau, c'est juste temporaire.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1984066
stealth35
Posté le 14-04-2010 à 20:49:41  profilanswer
 

drasche a écrit :

Je connais les détails techniques de l'histoire :o
 
Et elle existera à nouveau, c'est juste temporaire.


 
vu dans se sens la oui, PHP 7 aussi  :lol:

mood
Publicité
Posté le   profilanswer
 


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

  [résolu] strtr renvoie des caractères farfelus (UTF-8)

 

Sujets relatifs
[resolu]Jquery, slider bug sur IE[Résolu] - [XSL] problème avec un xls:for-each
[résolu] 1 applet insérée 2 fois dont seule la première marche[Résolu]Prog java ecoute même quand pas focus dans Windows
[Résolu] Choix d'un schéma d'une table[Résolu][Hibernate] Mapping tricky entre 4 tables
Decalage dans internet explorer 6 [résolu][Résolu] Stripes, JBoss et EJB3
[RESOLU] Rafraichissement d'une barre d'état[resolu] IE6 object flash et <!--[ if IE]>
Plus de sujets relatifs à : [résolu] strtr renvoie des caractères farfelus (UTF-8)


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