15

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

看到这是不可能的,因为我正在使用 .NET 平台,因为 XSLT 应用于 Sharepoint 页面。有没有办法在 XML 中调用 javascript 编码函数来编码这个购买,代码片段如下:

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

谢谢,

4

4 回答 4

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"

[更新]

我为自定义命名空间放置的 Url 可以是任何东西 ..它只是一个唯一标识符..
链接得出的结论是,如果您不使用 url 作为标识符,它就不会那么混乱了..

[更新 2]

一些补充信息。
如果您使用 MSXML6,那么您需要通过使用AllowXsltScript属性手动允许在 XSLT 中编写脚本。(参考
根据您加载 xslt 的方式及其设置,请查看使用 msxsl 的脚本块中的示例:脚本 如何允许脚本

于 2010-03-11T14:37:41.820 回答
8

这些XSLT 1.0 样式表可用于执行 URL 编码/解码:

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

描述:只有很小的 ASCII 字符子集可以安全地嵌入到 URI 中。此集合之外的字符必须使用所谓的“URL 编码”或“%-转义”进行转义。根据某种编码(如果可能的话,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 演示 URL 编码作为名为 iso-string 的参数传入的任意字符串。它假定 ISO-8859-1 将是 URL 编码的基础。它应该与任何 XSLT 1.0 处理器兼容。

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

于 2010-08-19T01:39:03.530 回答
1

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

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

于 2010-03-11T14:10:45.097 回答
1

在某些情况下,您可以使用 EXSLT(解析器提供的扩展):Dave Pawson 的 XSLT FAQ关于这个。

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

于 2010-03-11T14:17:34.697 回答