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

  FORUM HardWare.fr
  Programmation
  PHP

  htmlentities et code html, pb avec <br>

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

htmlentities et code html, pb avec <br>

n°1330865
polo7
Posté le 23-03-2006 à 11:10:13  profilanswer
 

Salut à tous,
Je gère plusieurs langues sur mes site.
Les expressions sont dans des fichiers .txt
Le pb c'est qu'avec certains serveur je doit mettre htmlentities car sinon les "é" deviennent "?".
Ceci fait, un autre pb apparaît: les "<br>" s'affichent "<br" soit en html: "&lt;br&gt;"
 
Un idée?
Merci

mood
Publicité
Posté le 23-03-2006 à 11:10:13  profilanswer
 

n°1330884
chaced
Posté le 23-03-2006 à 11:24:16  profilanswer
 

vérifi l'encodage de ton fichier (genre UTF8) sans passer par htmlentities sinon remplace tout les accents par du ascii html toi meme dans ton txt.


Message édité par chaced le 23-03-2006 à 11:24:32

---------------
CPU-Z | Timespy | Mes bd
n°1330903
polo7
Posté le 23-03-2006 à 11:40:14  profilanswer
 

Je vérifie comment ?, avec XP, je créé un simple fichier .txt ou chaque expression est sur un ligne différente.

n°1330924
chaced
Posté le 23-03-2006 à 11:59:03  profilanswer
 

ça depend le traitement de texte, mais on doit pouvoir spécifier le format de sortie, sinon remplace tout tes accents par du ascii genre é devient &eacute;


---------------
CPU-Z | Timespy | Mes bd
n°1330946
smaragdus
whores, drugs & J.S. Bach
Posté le 23-03-2006 à 12:16:45  profilanswer
 

polo7 a écrit :

Les expressions sont dans des fichiers .txt
Le pb c'est qu'avec certains serveur je doit mettre htmlentities car sinon les "é" deviennent "?".
Ceci fait, un autre pb apparaît: les "<br>" s'affichent "<br" soit en html: "&lt;br&gt;"


 
Je ne suis pas sûr de comprendre : tes fichiers texte contiennent du html ?
 
Si c'est le cas, c'est pas comme ça qu'il faut procéder :
* ou tu enregistres tes textes en format texte donc avec les accents encodés (en iso ou en utf à toi de voir) et des CR+LF pour les retours à la ligne
* ou tu enregistres tes textes en format html donc avec des <br> et des htmlentities &eacute; etc...
 
Sinon c'est pas cohérent/consistant.

n°1330956
the_bigboo
Posté le 23-03-2006 à 12:31:56  profilanswer
 

d'abord un htmlentities, et apres un nl2br()...
Le pluys imple reste d'utiliser un XML :o

n°1330965
polo7
Posté le 23-03-2006 à 12:45:22  profilanswer
 

J'ai fait des fichiers .txt ou j'écris mes enregstrements à la suite, un par ligne.
J'écris: "Bonjour je m'appelle<br>Jacques"
Et j'utilise ensuite htmlentities pour qu'il n'y ai pas de pb avec les accents. J'ai bricolé qqchose en faisant des str_replace sortir avec <br>.

n°1330969
chaced
Posté le 23-03-2006 à 12:49:17  profilanswer
 

polo7 a écrit :

J'ai fait des fichiers .txt ou j'écris mes enregstrements à la suite, un par ligne.
J'écris: "Bonjour je m'appelle<br>Jacques"
Et j'utilise ensuite htmlentities pour qu'il n'y ai pas de pb avec les accents. J'ai bricolé qqchose en faisant des str_replace sortir avec <br>.


 
Donc soit tu enregistre ton fichier au bon format, en fait le meme qu'utilise ton serveur, donc soit du UT8 soit du ISO
 
Soit tu remplace betement les accents dans ton txt par du ascii genre ton  
 
"fenètre<br>bonjour" devient "fen&eagrave;tre<br>bonjour"


---------------
CPU-Z | Timespy | Mes bd
n°1331010
polo7
Posté le 23-03-2006 à 13:30:08  profilanswer
 

Alors comment peut on enregister un .txt en UT8 qui semble assez universel?

n°1331012
nargy
Posté le 23-03-2006 à 13:31:40  profilanswer
 

tu peut essayer:
"Bonjour je m'appelle\nJacques"
 
str_replace("\\n","<br>",htmlentities($ligne));
 

mood
Publicité
Posté le 23-03-2006 à 13:31:40  profilanswer
 

n°1331017
chaced
Posté le 23-03-2006 à 13:34:36  profilanswer
 

nargy a écrit :

tu peut essayer:
"Bonjour je m'appelle\nJacques"
 
str_replace("\\n","<br>",htmlentities($ligne));


 
Merci les scripts poussifs  :whistle:


---------------
CPU-Z | Timespy | Mes bd
n°1331027
polo7
Posté le 23-03-2006 à 13:48:12  profilanswer
 

J'ai déjà fait provisoirement: $l_valeur = str_replace("&lt;br&gt;","<br>",$l_valeur);
Mais il faut une solution qui est acceptée par le plupart des serveurs.

n°1331031
the_bigboo
Posté le 23-03-2006 à 13:51:05  profilanswer
 

si les expressions sont dans un fichier TXT, d'abord tu les met toutes a la ligne les une des autres... ensuite , tu utilise file() qui te retourne un tableau don chaque élément est une ligne de ton fichier texte, et pis tu appliques un htmlentities()
 
Ca ne va pas ca ?

n°1331032
nargy
Posté le 23-03-2006 à 13:54:27  profilanswer
 

> Merci les scripts poussifs  :whistle:
apparemment la bidouille c est ce qu il y de plus apprécié :lol:

n°1331036
nargy
Posté le 23-03-2006 à 13:57:03  profilanswer
 

des bidouilles un peu plus efficaces:
 
- utiliser serialize()/unserialize() sur le fichier texte
- include(messages.inc);

n°1331053
smaragdus
whores, drugs & J.S. Bach
Posté le 23-03-2006 à 14:23:28  profilanswer
 

polo7 a écrit :

J'ai fait des fichiers .txt ou j'écris mes enregstrements à la suite, un par ligne.
J'écris: "Bonjour je m'appelle<br>Jacques"
Et j'utilise ensuite htmlentities pour qu'il n'y ai pas de pb avec les accents.


Dans ce cas, utilise utf8_encode() ou iconv().
 
 
Il reste que ton format de fichier txt est boiteux : c'est ni du texte ni du html [:spamafote]

n°1331059
the_bigboo
Posté le 23-03-2006 à 14:27:00  profilanswer
 

smaragdus a écrit :

Dans ce cas, utilise utf8_encode() ou iconv().
Il reste que ton format de fichier txt est boiteux : c'est ni du texte ni du html [:spamafote]


XML !!!  :fou:  :fou:

n°1331063
smaragdus
whores, drugs & J.S. Bach
Posté le 23-03-2006 à 14:30:56  profilanswer
 


 
arrête de nous casser les couilles avec ton xml  :sarcastic:  

n°1331066
the_bigboo
Posté le 23-03-2006 à 14:34:03  profilanswer
 

smaragdus a écrit :

arrête de nous casser les couilles avec ton xml  :sarcastic:


Quoi ! C'est le plus adapté ! Que proposes tu de mieux ?? Vas-y parle !

n°1331071
smaragdus
whores, drugs & J.S. Bach
Posté le 23-03-2006 à 14:42:25  profilanswer
 

the_bigboo a écrit :

Quoi ! C'est le plus adapté !


Clairement.
Mais c'est pas la question de polo7.

n°1331078
the_bigboo
Posté le 23-03-2006 à 14:52:57  profilanswer
 

et bien je pense que si , apporte une solution au probleme qu'il expose s'apparenterait plus a du bricolage, utiliser des technologies comme le XML, rends l'application finale claire et portable...
 
En plus c'est tres ludique car ca lui apprendrai a manier les flux RSS éventuellement... Cela dit j'avais déjà proposé quelque chose aussi, je ne faisait qu'une suggestion...

n°1331091
Woutcha
Posté le 23-03-2006 à 15:17:27  profilanswer
 

Petite suggestion pour faire les choses proprement :
 
- Utiliser UTF-8 comme encodage (charset) pour les fichiers de definition des traductions
- lors de l'affichage d'une page HTML, bien indiquer le charset HTML
en utilisant le header qui va bien : header("Content-Type:  text/html; charset=UTF-8);
 
Pour ce qui est du format des fichiers de traduction, un fichier texte peut faire  
l'affaire mais c'est lourd a manipuler et pas tres elegant...
 
Je te conseillerais une methode analogue a celle utilisee dans SugarCRM :
 
- pour chaque langue tu as un fichier de traduction : lang_fr.php, lang_us.php, etc..
- chaque fichier contient un tableau principal et un sous-tableau associatif pour chaque page de ton
site qui doit contenir des traductions.
Ce tableau associatif contient des couples clef->traduction
 
ex :

Code :
  1. <?php
  2. $lang = array (
  3.   'login' =>
  4.   array (
  5.     'sign_in' => 'Connection compte',
  6.     'username' => 'Nom utilisateur',
  7.     'password' => 'Mot de passe',
  8.     'language' => 'Langue',
  9.     'select_lang' => 'Selectionez votre langue',
  10.     'submit' => 'Se connecter',
  11.     'lost_password' => 'Mot de passe perdu?'
  12.   )
  13. )
  14. ?>


 
 lors de l'affichage d'une page, tu inclus le bon fichier de langue et tu recuperes  
 le sous tableau qui correspond a ta page. Tu accedes ensuite a tes traduction via les clefs
 
 ex :  
 

Code :
  1. include_once $file_name;
  2. $language_array = $lang[$page_name];
  3. print $language_array['username'];


 
 voila, voila, bon courage.


Message édité par Woutcha le 23-03-2006 à 15:19:43
n°1331102
nargy
Posté le 23-03-2006 à 15:27:10  profilanswer
 

> utiliser des technologies comme le XML, rends l'application finale claire et portable...
Ça revient à htmlentitizer ou à unicoder ses messages
 
Une solution efficace consiterai à:
- utiliser htmlentities pour éviter les calculs et se borner à un simple transfert disque->réseau->navigateur
- ne charger que les messages necessaires à l affichage de la page, donc gérer les messages à part dans le backoffice pour générer les fichiers contenant les messages qu il faut et pas plus, dans l ordre d affichage pour pouvoir lire le fichier des messages à la volée
 
convertisseur.php:

Code :
  1. $out=fopen("messages.htm","a" );
  2. $messages=file("messages.txt" );
  3. foreach($messages as $m)
  4.   fwrite($out, str_replace("&lt;br&gt;","<br>",htmlentities($m)))
  5. ;
  6. fclose($out);


 
libmessages.inc:

Code :
  1. function libmessages_init($nomfichiermessage, $taille_max_messages=1024)
  2. {
  3.   global $fichier_messages, $taille_max_message;
  4.   $fichier_messages=fopen($nomfichiermessage,"r" );
  5.   $taille_max_message=$taille_max_messages;
  6. }
  7. function libmessages_close()
  8. {
  9.   global $fichier_messages;
  10.   fclose($fichier_messages);
  11. }
  12. // afficher le prochain message
  13. function libmessages_print()
  14. {
  15.   global $fichier_messages, $taille_max_message;
  16.   echo fgets($fichier_messages, $taille_max_message);
  17. }
  18. // retourner le prochain message pour multiple utilisations
  19. function libmessages_get()
  20. {
  21.   global $fichier_messages, $taille_max_message;
  22.   return fgets($fichier_messages, $taille_max_message);
  23. }
  24. // ignorer le prochain message
  25. function libmessages_skip()
  26. {
  27.   global $fichier_messages, $taille_max_message;
  28.   fgets($fichier_messages, $taille_max_message);
  29. }

n°1331108
nargy
Posté le 23-03-2006 à 15:31:46  profilanswer
 

> - pour chaque langue tu as un fichier de traduction : lang_fr.php, lang_us.php, etc..  
 
Ça c est la solution pratique, je l ai déjà utilisée, ça marche très bien et c est facile d ajouter une nouvelle traduction

n°1331112
Djebel1
Nul professionnel
Posté le 23-03-2006 à 15:36:42  profilanswer
 

ou en objet tu peux avoir pour chaque langue un objet ; tous les objets de langue ont la même interface. Tu instancie le bon objet en fonction de la langue souhaitée, et ensuite, rien ne change, tous les appels de méthodes sont identiques.
(ça revient a peu près au même que la solution précédente)

n°1331115
smaragdus
whores, drugs & J.S. Bach
Posté le 23-03-2006 à 15:38:56  profilanswer
 

Plutôt que d'utiliser un tableau associatif, c'est pas mieux d'utiliser des constantes ? C'est bien plus léger.

n°1331117
the_bigboo
Posté le 23-03-2006 à 15:40:41  profilanswer
 

autant utiliser des méthodes statiques, un instanciation serait inutile !
Meme une simple fonction suffirait ;) :
 

Code :
  1. function GetWord_FR($Word)
  2. {
  3. $words = array('chien'=>'chien','chat'=>'chat') ;
  4. return $words[$Word] ;
  5. }


 
Et tu adaptes a la langue ;)

n°1331127
Djebel1
Nul professionnel
Posté le 23-03-2006 à 15:51:52  profilanswer
 

On s'est mal compris the_bigboo, je ne parle pas de faire une classe qui ne fait rien d'autre que de balancer un tableau.
 
Là tu fais :

Code :
  1. interface Langue
  2. {
  3.     public function bonjour();
  4. }
  5. class Francais implements Langue
  6. {
  7.     public function bonjour()
  8.     {
  9.         echo 'bonjour';
  10.     }
  11. }
  12. class Anglais implements Langue
  13. {
  14.     public function bonjour()
  15.     {
  16.         echo 'Hello';
  17.     }
  18. }


et ensuite, là où tu en as besoin :

Code :
  1. //on instancie la classe souhaité :
  2. if ($_GET['langue'] == 'en') $langue = new Anglais;
  3. else $langue = new Francais;
  4. //on affiche le message
  5. $langue->bonjour();


 
M'enfin, ça change pas grand chose par rapport au principe d'inclure un fichier avec des variables en fonction de la langue demandée.


Message édité par Djebel1 le 23-03-2006 à 15:55:30
n°1331157
Woutcha
Posté le 23-03-2006 à 16:05:09  profilanswer
 

smaragdus a écrit :

Plutôt que d'utiliser un tableau associatif, c'est pas mieux d'utiliser des constantes ? C'est bien plus léger.


 
Plus leger je ne sais pas mais en tout cas une structure de type tableau est beaucoup plus souple a utiliser:
 
- tu peux par exemple mettre en place un system qui, si une traduction a ete oubliee dans un fichier
de langue, va aller chercher une traduction par defaut (ce qui evite d'avoir un label vide ou une erreur)
- ou encore mieux, ecrire en quelques dizaine de lignes un petit script qui va prendre ton fichier de langue de  
reference et verifier que tous les autres fichiers de langue son complets
- etc...
 
La structure de tableau en php est tres souple et presente beaucoup de fonctionnalites.
Avec des constantes... c'est moins facile.

Message cité 1 fois
Message édité par Woutcha le 23-03-2006 à 16:06:41
n°1331166
Djebel1
Nul professionnel
Posté le 23-03-2006 à 16:12:41  profilanswer
 

ou des classes avec la meme interface, pour etre sur de ne rien oublié (oui je l'aime cette méthode par classe  :o )

n°1331169
smaragdus
whores, drugs & J.S. Bach
Posté le 23-03-2006 à 16:18:23  profilanswer
 

Woutcha a écrit :

La structure de tableau en php est tres souple et presente beaucoup de fonctionnalites.
Avec des constantes... c'est moins facile.


 
en effet :jap:

n°1331208
chaced
Posté le 23-03-2006 à 16:57:42  profilanswer
 

smaragdus a écrit :

arrête de nous casser les couilles avec ton xml  :sarcastic:


 
+1 ça fait 3 jours que je fais une moulinette tout en xml, c'est vraiement galere, en bonus, les perfs sont a chier :(
 
a l'arrache, pour un fichier langue, bonne vieille methode, un fichier lang.fr.php qui contient :
LANG['SALUT']='Salut ça boom ?';...
 
et hop un include :D


---------------
CPU-Z | Timespy | Mes bd
n°1331211
the_bigboo
Posté le 23-03-2006 à 17:01:07  profilanswer
 

chaced a écrit :

+1 ça fait 3 jours que je fais une moulinette tout en xml, c'est vraiement galere, en bonus, les perfs sont a chier :(
 
a l'arrache, pour un fichier langue, bonne vieille methode, un fichier lang.fr.php qui contient :
LANG['SALUT']='Salut ça boom ?';...
 
et hop un include :D


je serais curieux de savoir comment tu as architecturé ton truc...

n°1331214
chaced
Posté le 23-03-2006 à 17:03:21  profilanswer
 

Je n'architecture pas une langue, je fais une moulilnette d'import export en XML :D Et pour la langue, c'est anglais point barre :D
 
mais bon le coup du fichier langue qui s'appelle suivant une parametre, c'est ultra connue, meme si c'est loin de valoir un i18n


---------------
CPU-Z | Timespy | Mes bd
n°1331251
Woutcha
Posté le 23-03-2006 à 18:04:02  profilanswer
 

chaced a écrit :


mais bon le coup du fichier langue qui s'appelle suivant une parametre, c'est ultra connue, meme si c'est loin de valoir un i18n


 
Heu, c'est bien d'utiliser des notions (i18n) mais encore faut-il en connaitre la signification exacte...
i18n est l'abreviation pour internationalization. Ce model permet pour une application le support de 2 langues en meme temps :
anglais + une autre.
 
Donc le "coup du fichier langue qui s'appelle suivant une parametre" peut parfaitement etre une partie de l'implementation
du model i18n pour une application.
 
 

n°1331255
chaced
Posté le 23-03-2006 à 18:11:42  profilanswer
 

quand je parles du i18n je parles du mod gettext si tu preferes ;)


---------------
CPU-Z | Timespy | Mes bd
n°1331262
Woutcha
Posté le 23-03-2006 à 18:30:54  profilanswer
 

chaced a écrit :

quand je parles du i18n je parles du mod gettext si tu preferes ;)


 
Ok, je comprend mieux :jap:
C'est vrai que gettext peut tres bien etre aussi applique a du dev web. Peut etre un poil plus complique
au premiere abord, mais en effet c'est un solution complete et coherente.
 

n°1331264
chaced
Posté le 23-03-2006 à 18:32:22  profilanswer
 

Tu as une superbe représentation de gettext web avec avec le celebre Horde/Imp


---------------
CPU-Z | Timespy | Mes bd
n°1353235
polo7
Posté le 25-04-2006 à 00:19:56  profilanswer
 

Merci bien pour vos infos, je vois qu'il a pas mal de possibilités.
Je préfère refaire mes fichiers de langues et avoir un système qui fonctionne bien sur plusieurs sites plutot que de bidouiller.
Il faudrait que je puisse ajouter dans les langues de l'html comme "Bonjour,<br>Nom:...".
La proposition de nargy semble très utilisée par pas mal de scripts.
Je souhaite écrire sans devoir écrire en html avec les &a... et que les " et les ' soient aussi accepté.
Un script simple et facilement utilisable?

n°1353238
polo7
Posté le 25-04-2006 à 00:37:20  profilanswer
 

Avec un BDD MySQL, un champ une langue et un champ pour le nom de variable ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  htmlentities et code html, pb avec <br>

 

Sujets relatifs
[RESOLU]Faire une gallerie de photo en HTML [SISI CA MARCHE] :)[valid HTML vs invalid HTML] le saviez-vous ?
[Résolu] Du mal a analyser ce codeajouter un label sur un formulaire par code?
souci avec player mp3 flash et page htmlprobleme affichage php/html (simple)
HTML et W3C[PHP] transformer un fichier PDF en TXT ou HTML(idéalement)
Pb de code VB sous access : FileDialogAfficher le lecteur windows media dans une page html
Plus de sujets relatifs à : htmlentities et code html, pb avec <br>


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