Dotclear

Ticket #359 (closed defect: fixed)

Opened 17 years ago

Last modified 17 years ago

Formatage des caractères spéciaux HTML

Reported by: sacha Owned by: olivier
Priority: normal Milestone: 2.1
Component: module:core Version: 2.0 RC2
Severity: normal Keywords:
Cc:

Description

Comme signalé par  Mirovinben, il y a un petit soucis dans l'affichage de l'extrait du contenu des billets dans la balise meta description, le contenu HTML est supprimé mais certaines entités HTML (ici, le guillemet double) ne le sont pas - ce qui rend le code non-conforme au XHTML.

Le patch ci-joint est sensé corriger ces problèmes. Pour procéder correctement, on supprime d'abord les balises HTML, on interprète les entités HTML (pour ne pas les couper en plein milieu, et pour que la coupure corresponde exactement au nombre de caractères affichés, càd que & contera pour 1 caractère au lieu de 5), on coupe la chaîne, puis enfin on encode les caractères spéciaux HTML pour afficher le résultat.

Change History

comment:1 Changed 17 years ago by sacha

J'envoie le patch par mail, Trac affiche une erreur interne.

comment:2 follow-up: ↓ 3 Changed 17 years ago by olivier

Sauf que cut_string ne va jamais couper une entité au milieu puisque qu'il coupe aux espaces. Un simple encode_html="1" est suffisant. Je l'ajoute tout à l'heure.

comment:3 in reply to: ↑ 2 Changed 17 years ago by sacha

Replying to olivier:

Sauf que cut_string ne va jamais couper une entité au milieu puisque qu'il coupe aux espaces. Un simple encode_html="1" est suffisant. Je l'ajoute tout à l'heure.

Très juste. Mais j'ai voulu prévoir une situation peu probable, mais qui m'est arrivée dans un autre contexte, où cut_string ne peut pas couper la chaîne à côté de l'espace, car celui-ci se trouve trop loin par rapport à la limite de coupure.

comment:4 Changed 17 years ago by olivier

  • Status changed from new to assigned

J'en reste donc à un ajout de encode_html="1" parce que, à ce stade, il n'est pas question que je supprime des méthodes publiques ou change des procédures utilisées un peu partout :)

comment:5 Changed 17 years ago by olivier

  • Status changed from assigned to closed
  • Resolution set to fixed

(In [2221]) Force encode_html="1" in meta description value for post. Closes #359. Added fullscreen support on flv player in attachements. Closes #360.

comment:6 Changed 17 years ago by sacha

  • Status changed from closed to reopened
  • Resolution fixed deleted

Oui mais malheureusement non, on se retrouve avec des caractères échappés deux fois.

Input boîte de saisie du billet :
→ Simple billet de test : 1 < 2 ; " ; &

Output HTML :
→ <p>Simple billet de test&nbsp;: 1 &lt; 2&nbsp;; "&nbsp;; &amp;</p>

Output META "description" dès r2221 :
→ Simple billet de test&amp;nbsp;: 1 &amp;lt; 2&amp;nbsp;; &quot;&amp;nbsp;; &amp;amp;

Output META "description" avec mon patch :
→ Simple billet de test : 1 &lt; 2 ; &quot; ; &amp;

Les méthodes publiques, on peut les garder, par contre global_filter n'est utilisé qu'une seule fois dans class.dc.template. Il n'y aura pas non plus de problèmes de cache car les fichiers template ont été modifiés. Mais c'est toi qui voit, c'est juste une suggestion ;)

Autrement il y a une autre solution, c'est d'échapper le guillemet dès l'enregistrement du billet, peut-être avec ceci dans class.dc.blog.php aux alentours de la ligne 1259 :

		$exerpt_xhtml = str_replace('"','&quote;',$excerpt_xhtml);
		$content_xhtml = str_replace('"','&quote;',$content_xhtml);

Cela fonctionne quelque soit le "Text formater" utilisé. Le seul inconvéniant c'est que le problème va persister avec les anciens billets.

comment:7 Changed 17 years ago by olivier

  • Milestone changed from 2.0 to 2.1

comment:8 Changed 17 years ago by olivier

Dans la mesure où ce n'est pas bloquant (juste un peu moche), ça passe en 2.1

comment:9 Changed 17 years ago by olivier

  • Status changed from reopened to closed
  • Resolution set to fixed

(In [2359]) Added html::decodeEntities in remove_html template filtre. Should fix #359.

Note: See TracTickets for help on using tickets.

Sites map