【问题标题】:XSLT version 1 URL encodingXSLT 版本 1 URL 编码
【发布时间】:2010-03-11 14:07:52
【问题描述】:

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

看到这是不可能的,因为我使用的是 .NET 平台,因为 XSLT 应用于 Sharepoint 页面。有没有办法在 XML 中调用 javascript 编码函数对这个购买进行编码,sn-p 下面:

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

谢谢,

【问题讨论】:

    标签: xslt urlencode


    【解决方案1】:

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

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

    并称它为custom:uriencode( url_to_encode )

    您首先需要定义命名空间,方法是在 &lt;xsl:stylesheet ... 标记中添加 xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

    [更新]

    我为自定义命名空间放置的 URL 可以是任何东西 ..it is just a unique identifier..
    该链接得出的结论是,如果您不使用 url 作为标识符,它会减少混乱..

    [更新日期 2]

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

    【讨论】:

    • 调用为 会导致错误这不是正确的调用方式吗?
    • 尝试用&lt;xsl:value-of select="custom:uriencode(string($PrimarySubject))" /&gt;调用它
    • 返回的错误是什么? (你添加了命名空间对吗?
    • 是的 - 谢谢,添加了命名空间,不幸的是,错误没有显示为它在共享点页面上进行转换...我正在 ms 共享点设计器中对 xslt 进行更改并在共享点上查看页面。
    • 我添加了关于 MSXML6 的第二次更新,默认情况下不允许在 XSLT 中使用脚本..
    【解决方案2】:

    这些XSLT 1.0 stylesheets可用于执行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参数是字符串 被解码。

    【讨论】:

    • 不幸的是,这不是一个通用的解决方案,因为这些样式表仅限于 Latin1 并且不翻译整个 Unicode 字符集。
    【解决方案3】:

    没有。 XSLT 不了解 URL 和 HTML。

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        • 2021-09-04
        • 2011-02-20
        • 1970-01-01
        相关资源
        最近更新 更多