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[é]]></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 "&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 é ?
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 &
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  sans le &.
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 & apparait dès l'injection dans le jx, donc la
xsl voit & 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 = "é";
> 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>é</foo> rend un accent.
mais <foo>${bar}</foo> rend un &#233;
avec dans le flow :
var bar = "é";
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 é en "brut".
Pourtant <foo>é</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 & ?
CDATA ne concerne pas la transformation XSL, seulement le parseur qui
lit le XML.
Avec ce document XML en entrée:
<foo>é</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>é</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 é en "brut". Et si CDATA signifie justement ne rien
interpréter, pourquoi la xsl remplace-t'elle quand même & par & ?
*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[é]]></foo>
>
> ...Seulement le problème est que la transformation me rend "&233;",
> et pas "e accent aigu"..
oui - CDATA veut dire "ne rien interpréter".
Ce que tu veux est plutôt
<foo>é</foo>
je suppose.
-Bertrand