[xsl] special characters replaced in javascript url

Subject: [xsl] special characters replaced in javascript url
From: "Mingqiang Yu" <myu@xxxxxxxx>
Date: Fri, 21 Oct 2005 22:58:41 -0600 (MDT)
I have a problem which was asked a while ago but I couldn't find the final
answer to that question. So I'm sorry that I have to raise this question
again.(http://lists.xml.org/archives/xml-dev/200310/msg00841.html)

I have a very similar problem in which, I have an xml record passed to my
stylesheet which contains the following string:
Cr&eacute;mieu, V.
So, in order for the stylesheet to handle this special characters
correctly, I need to defined it in my dtd file(document.dtd) like this:
<!ENTITY eacute  "&#233;" >
and include this dtd file in the xml file passed to the stylesheet:
<!DOCTYPE document  SYSTEM "document.dtd" >

Then, the special characters are displayed correctly but when I tried to
pass it as part of the url through javascript:
<a href="javascript:frLink('FRLink','author',&quot;{$thisTerm}&quot;);">
in which the $thisTerm is the string Cr&eacute;mieu, V., the same string
becomes "Cr%C3%A9mieu, V".

I tried to use the solution introduced in the link above by doing
escape-javascript like this:
<xsl:template name="escape-javascript">
    <xsl:param name="string" />
    <xsl:choose>
        <xsl:when test='contains($string, "&#233;")'>
            <xsl:call-template name="escape-javascript">
                <xsl:with-param name="string"
select='substring-before($string, "&#233;")' />
            </xsl:call-template>
            <xsl:text>&amp;eacute;</xsl:text>
            <xsl:call-template name="escape-javascript">
                <xsl:with-param name="string"
select='substring-after($string, "&#233;")' />
            </xsl:call-template>
        </xsl:when>
        <!-- test for other special characters or entities here -->
        <xsl:otherwise><xsl:value-of select="$string" /></xsl:otherwise>
    </xsl:choose>
</xsl:template>

It seems to work for this case. But I have too many special characters
that I cannot do the escape for every special characters.

Can you help to find a better solution to solve this problem?

Thanks in advance.

Ming

Current Thread