Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PHP et TIDY mais surout TIDY

7 réponses
Avatar
Etienne SOBOLE
Salut j'utilise tidy pour remettre en forme des pages HTML,
mon tableau de conf est celui-ci

$tidy_config = array(
'char-encoding' => 'utf8',
'input-encoding' => 'utf8',
'output-encoding' => 'utf8',
'output-xhtml' => TRUE,
'ident' => true,
'wrap' => 0
);


la problème est que lorsque j'ai un caractère accentué (par exemple) tidy
s'attend a le trouver en utf8 (ce qui est normal vu que ma page est en utf8)
sauf que parfois le caractère accentue est escapé en HTML ´ par
exemple et la rien ne va plus !
tidy n'arrive pas a remplacer ce caractère escapé par son equivalent UTF8 et
me renvoit un fichier plus ou moins foireux qui au final ne passe pas dans
un parser XML du php.

Quelqu'un a une idée, sauf a coder moi meme la fonction qui decode les
caractère escapé...
pour info, je ne peux évidement pas utiliser la fonction html_entity_decode
qui va aussi me decoder les caractère & !!!

Etienne

7 réponses

Avatar
Olivier Miakinen

[le] problème est que lorsque j'ai un caractère accentué (par exemple) tidy
s'attend a le trouver en utf8 (ce qui est normal vu que ma page est en utf8)
sauf que parfois le caractère accentue est escapé en HTML ´ par
exemple et la rien ne va plus !
[...]

pour info, je ne peux évidement pas utiliser la fonction html_entity_decode
qui va aussi me decoder les caractère & !!!


Sauf erreur, il te suffit d'appeler en séquence html_entity_decode et
htmlspecialchars, dans un sens ou dans l'autre, pour décoder les
caractères accentués mais pas les caractères spéciaux.

Avatar
Etienne SOBOLE
Sauf erreur, il te suffit d'appeler en séquence html_entity_decode et
htmlspecialchars, dans un sens ou dans l'autre, pour décoder les
caractères accentués mais pas les caractères spéciaux.


Hum ben non.
si tu html_entity_decode tu vas transformer les $lt; en <
et la c'est fouttu !!!

nan ben en fait je codé la fonction a la main...
ca marche pas trop mal.

tidy c'est bien, mais c'est pas non plus parfait !!!
j'ai trouvé un site ou le gars avait mis une balide <script>
il ne l'as pas fermé et derriere il a mis une balide <meta>

et ben les navigateurs vont ignorr la balise <script> alors que tidy va
encoder byzarrement d'ailleurs tout ce qu'il y a derriere la balise <script>

Bon voila.
ca reste quand meme un oulit sympa :)

a+
Etienne

Avatar
Olivier Miakinen
Le 05/09/2007 12:39, Etienne SOBOLE me répondait :

Hum ben non.
si tu html_entity_decode tu vas transformer les $lt; en <
et là c'est foutu !!!


Les « &lt; », je suppose. Mais tu as raison, ça ne marche pas.

nan ben en fait j'ai codé la fonction a la main...
ca marche pas trop mal.


Ok.

tidy c'est bien, mais c'est pas non plus parfait !!!
j'ai trouvé un site où le gars avait mis une balise <script>
il ne l'as pas fermée et derrière il a mis une balise <meta>

eh ben les navigateurs vont ignorer la balise <script> alors que tidy va
encoder bizarrement d'ailleurs tout ce qu'il y a derrière la balise <script>


Comme on dit, « Garbage In, Garbage Out ». Je ne vois pas pourquoi
tous les navigateurs réagiraient comme tu le dis à ce code incorrect.
Certains pourraient parfaitement faire comme tidy, et interpréter
bizarrement tout ce qui (selon eux) se trouve dans un élément script.

Avatar
Etienne SOBOLE
Comme on dit, « Garbage In, Garbage Out ». Je ne vois pas pourquoi
tous les navigateurs réagiraient comme tu le dis à ce code incorrect.
Certains pourraient parfaitement faire comme tidy, et interpréter
bizarrement tout ce qui (selon eux) se trouve dans un élément script.


Ah oui, il pourrait, mais ca semble pas être le cas.
enfin bon pas tres grave.
ca ne touche que tres peu de pages, qui passent donc a la trappe d'une
remise en forme !!!

Etienne

Avatar
Olivier Miakinen

Hum ben non.
si tu html_entity_decode tu vas transformer les $lt; en <
et là c'est foutu !!!


Les « &lt; », je suppose. Mais tu as raison, ça ne marche pas.


Finalement... en y re-re-re-réfléchissant... bien sûr, ça ne marche pas
si tu commences par htmlspecialchars avant de faire html_entity_decode
parce que &lt; va devenir &amp;lt; avant de redevenir &lt;, mais qu'il
en sera de même de &eacute;.

Mais si tu fais l'inverse ? En principe tu devrais avoir :
&lt; ==> < ==> &lt;
&eacute; ==> é ==> é

Je me trompe ?


Avatar
Etienne SOBOLE
Mais si tu fais l'inverse ? En principe tu devrais avoir :
&lt; ==> < ==> &lt;
&eacute; ==> é ==> é

Je me trompe ?


Oui tu te trompes.

car <b>titre</b>
va devenir &lt;b&gt;titre&lt;/b&gt;
et c'est pas trop le but ;)

Etienne

Avatar
Olivier Miakinen

Je me trompe ?


Oui tu te trompes.

car <b>titre</b>
va devenir &lt;b&gt;titre&lt;/b&gt;
et c'est pas trop le but ;)


Ah, en effet. C'est sans espoir, donc, sauf à faire ce que tu as
fait (une fonction codée à la main).

Désolé.