You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by Laurent Perez <ha...@gmail.com> on 2005/03/11 10:37:09 UTC

Caractères échappés dans un JXTemplate ?

Hello

J'ai un petit problème de caractères HTML dans un jx, transformé par une xslt :

Mon jx :
<foo><![CDATA[&#233;]]></foo>

Ma transformation :
<xsl:template match="/foo"><b><xsl:value-of select="."
disable-output-escaping="yes"/></b></xsl:template>

Seulement le problème est que la transformation me rend "&amp;233;",
et pas "e accent aigu". En fait, avec ou sans disable-output-escaping,
le comportement est identique. Si dans ma xsl, je passe en dur ce même
caractère, j'ai bien un accent au rendu.

QQun aurait-il une idée ?

Merci

laurent

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Caractères échappés dans un JXTemplate ?

Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 11 mars 05, à 15:39, Laurent Perez a écrit :
> ...en pratique je
> dois injecter un array d'emojis vers le jx (sortis d'une base), les
> emojis étant des caractères html spéciaux pour i-mode, représentés
> uniquement par des "&#code;".

Ils sont stockés littéralement comme ça dans la base, du style &#233 ?

Dans ce cas je pense que la solution la plus propre est de créer une 
classe java pour les "parser" et générer les caractères correspondants. 
C'est trivial et ça évitera tous les bricolages avec disable-escaping 
et compagnie.

-Bertrand

Re: Caractères échappés dans un JXT emplate ?

Posted by Laurent Perez <ha...@gmail.com>.
> Ce qu'il va te falloir, c'est une petite fonction qui convertit une
> String contenant ces encodages spéciaux en une String java normale
> (unicode). On doit pouvoir extraire ça d'un parsers XML,

J'ai bien essayé (trouvé de nombreuses classes utilitaires UTF8.java
via google), mais ça n'a pas l'air de fonctionner (toujours un &amp;
en sortie).

Après avoir lu de la doc sur ecmascript, le plus curieux est que dans
le flow, un var foo = "\uE63E"; (le code unicode hex d'une icone de
soleil) passé à un jx affiche bien &#58942; sans le &amp;.

Quelqu'un dispose-t'il d'une fonction magique capable de changer
"&#code;" en unicode ?

> solution "bourrin" consistant à passer la chaîne de caractères entourée
> de "<root>" et "</root>" à parser et récupérer le noeud texte.
> Ou tu peux essayer <xsl:value-of select="toto"
> disable-output-escaping="yes"/> 

Justement non, le &amp; apparait dès l'injection dans le jx, donc la
xsl voit &amp; et pas &, le disable-output-escaping n'ayant aucun
effet.

Laurent

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Caractères échappés dans un JXTemplate ?

Posted by Sylvain Wallez <sy...@apache.org>.
Laurent Perez wrote:

>>peut-être que
>>        var bar = "é"
>>fonctionne si l'encoding utilisé pour sauver ton fichier flowscript est
>>correct.
>>    
>>
>
>oui ça fonctionne, mais je ne peux pas me permettre de le déclarer en
>dur dans le flow. l'accent n'est qu'un exemple simple, en pratique je
>dois injecter un array d'emojis vers le jx (sortis d'une base), les
>emojis étant des caractères html spéciaux pour i-mode, représentés
>uniquement par des "&#code;".
>  
>

Ce qu'il va te falloir, c'est une petite fonction qui convertit une 
String contenant ces encodages spéciaux en une String java normale 
(unicode). On doit pouvoir extraire ça d'un parsers XML, ou utiliser la 
solution "bourrin" consistant à passer la chaîne de caractères entourée 
de "<root>" et "</root>" à parser et récupérer le noeud texte.

Ou tu peux essayer <xsl:value-of select="toto" 
disable-output-escaping="yes"/> qui est moins joli mais peut-être le 
plus rapide ;-)

Sylvain

-- 
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Caractères échappés dans un JXTemplate ?

Posted by Laurent Perez <ha...@gmail.com>.
> peut-être que
>         var bar = "é"
> fonctionne si l'encoding utilisé pour sauver ton fichier flowscript est
> correct.

oui ça fonctionne, mais je ne peux pas me permettre de le déclarer en
dur dans le flow. l'accent n'est qu'un exemple simple, en pratique je
dois injecter un array d'emojis vers le jx (sortis d'une base), les
emojis étant des caractères html spéciaux pour i-mode, représentés
uniquement par des "&#code;".

> Mais il y a surement une manière plus "portable" de définir des chaînes
> de caractères unicode dans flowscript, voir éventuellement la doc
> ecmascript.

n'étant pas un expert sur ecmascript, j'espère :-(

merci encore

laurent

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Caractères échappés dans un JXTemplate ?

Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 11 mars 05, à 14:32, Laurent Perez a écrit :

> ...var bar = "&#233;";
> cocoon.sendPage("foo.jx", {"bar" : bar});

Si le but est d'obtenir un e accent aigu, le flowscript doit fournir un 
e accent aigu, pas une chaîne d'escape XML, car celle-ci ne fait pas de 
sens dans le flowscript.

Je n'ai jamais défini de constantes "unicode" dans le flowscript, 
peut-être que

	var bar = "é"

fonctionne si l'encoding utilisé pour sauver ton fichier flowscript est 
correct.

Mais il y a surement une manière plus "portable" de définir des chaînes 
de caractères unicode dans flowscript, voir éventuellement la doc 
ecmascript.

En résumé: tant qu'on se trouve dans le code java ou flowscript, les 
caractères spéciaux ne doivent pas être échappés comme en XML, car ces 
langages traitent correctement les chaînes de caractères unicode. 
Ensuite, le flux SAX qui passe dans le pipeline est aussi correct du 
point de vue unicode, c'est seulement la sérialisation finale qui doit 
se faire correctement.

-Bertrand

Re: Caractères échappés dans un JXTemplate ?

Posted by Laurent Perez <ha...@gmail.com>.
> à moins qu'il ne soit "maltraité" en cours
> de route ;-)

... il s'agit peut-être de ça :

en dur, <foo>&#233;</foo> rend un accent.
mais <foo>${bar}</foo> rend un &amp;#233;

avec dans le flow :

var bar = "&#233;";
cocoon.sendPage("foo.jx", {"bar" : bar});

et avec la transformation :
 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform " >
    <xsl:template match="*">
      <b><xsl:apply-templates/></b>
    </xsl:template>
 </xsl:stylesheet>

est-ce un bug dans jexl ?

laurent

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Caractères échappés dans un JXTemplate ?

Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 11 mars 05, à 11:21, Laurent Perez a écrit :
> ...existait toujours, j'ai rajouté le CDATA justement pour essayer de
> laisser le &#233; en "brut".

Pourtant <foo>&#233;</foo> est bien un document xml correct qui 
contient un e accent aigu, à moins qu'il ne soit "maltraité" en cours 
de route ;-)

> Et si CDATA signifie justement ne rien
> interpréter, pourquoi la xsl remplace-t'elle quand même & par &amp; ?

CDATA ne concerne pas la transformation XSL, seulement le parseur qui 
lit le XML.

Avec ce document XML en entrée:

<foo>&#233;</foo>

Cette transformation XSL exécutée avec xalan

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
   <xsl:template match="*">
     <bof><xsl:apply-templates/></bof>
   </xsl:template>
</xsl:stylesheet>

donne bien en sortie <bof>XX</bof> où XX est un accent aigu dans 
l'encoding utilisé par xalan. A partir de la il faut voir ce qui est 
différent chez toi.

Hope que ça helps!

-Bertrand



Re: Caractères échappés dans un JXTemplate ?

Posted by Laurent Perez <ha...@gmail.com>.
> oui - CDATA veut dire "ne rien interpréter".
> Ce que tu veux est plutôt
> <foo>&#233;</foo>

Hello

Justement non, auparavant je n'avais pas de CDATA, et le problème
existait toujours, j'ai rajouté le CDATA justement pour essayer de
laisser le &#233; en "brut". Et si CDATA signifie justement ne rien
interpréter, pourquoi la xsl remplace-t'elle quand même & par &amp; ?

*lost* :-

Laurent

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Caractères échappés dans un JXTemplate ?

Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 11 mars 05, à 10:37, Laurent Perez a écrit :

> <foo><![CDATA[&#233;]]></foo>
>
> ...Seulement le problème est que la transformation me rend "&amp;233;",
> et pas "e accent aigu"..

oui - CDATA veut dire "ne rien interpréter".

Ce que tu veux est plutôt

<foo>&#233;</foo>

je suppose.

-Bertrand