XSLT版本1 URL编码

时间:2010-03-11 14:07:52

标签: xslt urlencode

XSLT版本1中是否有URL编码功能? 我在javascript中需要类似于encodeURIComponent函数的东西吗?

因为我正在使用.NET平台,因为XSLT应用于Sharepoint页面,因此这是不可能的。有没有办法对此购买进行编码,在下面的XML片段中调用javascript encode函数:

<xsl:template name="BuildLink">
    <xsl:param name="PrimarySubject" />
    <xsl:text>?PrimarySubject=</xsl:text>
    <xsl:value-of select="$PrimarySubject" />
</xsl:template>

谢谢,

4 个答案:

答案 0 :(得分:13)

您可以使用嵌入在XSLT中的JScript ...

<msxsl:script language="JScript" implements-prefix="custom">
function uriencode(string) {
 return encodeURIComponent(string);
}
</msxsl:script>

并将其称为custom:uriencode( url_to_encode )

您首先需要通过添加<xsl:stylesheet ...标记来定义命名空间 xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

<强> [更新]

我为自定义命名空间设置的网址可以是任何内容.. it is just a unique identifier ..
该链接的结论是,如果您不使用网址作为标识符,则不会产生混淆。

[udpdate 2]

一些补充信息 如果您使用MSXML6,那么您需要使用AllowXsltScript属性手动允许在XSLT中编写脚本..(reference
根据您加载xslt的方式及其设置,请查看Script Blocks Using msxsl:script上有关如何使用脚本的示例

答案 1 :(得分:7)

这些XSLT 1.0 stylesheets可用于执行URL编码/解码:

  1. url-decode.xsl
  2. url-encode.xsl
  3.   

    描述:只是一个非常小的子集   ASCII字符可以安全   嵌入在URI中。外面的人物   必须使用转义此集合   所谓的“URL编码”或   “%-escaping”。人物是   根据一些转换为字节   编码(如果可能,ASCII)和那些   每个字节都写为'%'   后跟2个十六进制数字。该   编码用作此基础   转换可以是任何东西,但趋向于   由上下文决定   正在使用URI。最近和   未来的标准使用UTF-8,但遗留下来   应用包括很多   广泛部署的服务器端   HTML表单数据的处理器假定   ISO-8859-1。

         

    例如,问候语“¡Hola,   César!“如果它可以嵌入到URI中   写成如下:   %A1Hola%2C%20C%E9sar! (...假设   ISO-8859-1作为编码的基础。   如果它是基于UTF-8,那么它会   是%C2%A1Hola%2C%20C%C3%A9sar!)。

         

    url-encode.xsl演示网址编码   作为一个传入的任意字符串   参数名为iso-string。它假定   ISO-8859-1将成为该基础   URL编码。它应该兼容   使用任何XSLT 1.0处理器。

         

    解码基于ISO-8859-1   URL编码的字符串使用类似的   技术。请参阅url-decode.xsl以获取   演示。它的url参数是字符串   要解码。

答案 2 :(得分:1)

没有一个。 XSLT不了解URL和HTML。

根据您使用的语言和平台,您可以使用XSLT extension来执行此操作。

答案 3 :(得分:1)

在某些情况下,您可以在此处使用EXSLT(解析器提供的扩展程序):Dave Pawson's XSLT FAQ

但是,XSLT是Turing完整的,所以你可以在XSLT本身写一个基本的URL编码器,理论上(我不会尝试)。