This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: [Fwd: %20 in href attribute]
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 30 Jan 2002 18:48:25 -0000
- Subject: RE: [xsl] [Fwd: %20 in href attribute]
- Reply-to: xsl-list at lists dot mulberrytech dot com
> When use a variable with string value, which contains spaces
> after the
> #, as the value of href attribute to the <a> tag, the transformer
> automatically replaces the spaces with %20 and causes the link not
> recognize the anchor in the targeting page. Is there a work
> around for
> that? Sample code as follow:
>
> <xsl:variable name="url" select="$urlink/@url"/>
> <a href="{$url}" target="ext_link" onclick="new_win()"><xsl:value-of
> select="$title"/></a>
>
> href value desired:
> http://www.state.ma.us/dhcd/components/dns/HtOHA.htm#About
> Our Programs
> what I got:
> http://www.state.ma.us/dhcd/components/dns/HtOHA.htm#About%20O
> ur%20Programs
>
This is a tricky one. The XSLT spec says that the whole URI reference should
be escaped, which is what is happening. XSLT 1.0 doesn't say that the "name"
attribute of the <a> element should be escaped, although HTML 4.0 recommends
this. But it's worse than that: in XHTML the name attribute is replaced with
an id attribute, and the id attribute is of type ID, which means it must be
an NCName, which means it cannot be URI-escaped, because it cannot contain a
"%" character.
The best workaround is to only use NCName values, containing ASCII
characters only, as your fragment identifiers. I know that's not very
satisfactory.
XSLT 2.0 provides an option to disable escaping of URI values in HTML
output. We're currently trying to define a function that would allow you to
do the escaping by hand. This would give you finer control, e.g. you could
avoid escaping the fragment identifier, and you could avoid escaping
javascript: URLs, which is another case that often causes problems.
Mike Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list