【问题标题】:URL and the & ampersandURL 和 & 和号
【发布时间】:2009-10-31 15:14:32
【问题描述】:

使用 XSLT 和 XPath 1.0,我想转义一个字符串以便在 URL 上使用,例如:

<description>one word &amp; another</description>

所以,描述元素的 text() 应该得到 URL 转义。

我该怎么做?

使用 C# (XslCompiledTransform) 代码如下:

string a = Server.UrlEncode("one word & another");

并且会产生:

one+word+%26+another

有什么建议吗?

【问题讨论】:

  • 您调整后的代码做出了无效假设。如果你有 &在您的 XML 中,并使用 XML 阅读器对其进行解析,您将永远不会看到 &在你记忆中的字符串中。 XML 解析器会自动将其转换为未转义的版本。因此,除非您的 UrlEncode sn-p 中的字符串使用正则表达式或其他东西(您永远不应该这样做)从 XML 中提取出来,否则它不适用
  • 是的,当然,你是对的。您将如何从 XSLT 获取该输出?

标签: url xslt escaping


【解决方案1】:

没有任何内置功能可以做到这一点,但与其重新发明轮子,还有样式表已经存在,例如:

http://skew.org/xml/stylesheets/url-encode/

转换很简单,但(希望)其他人会为您完成调试...

【讨论】:

  • 那么真的没有办法轻松地将任何短文本转换为链接吗?
  • 不单独使用 XSLT - 它是一种通用的转换语言,所以它并不令人惊讶。您可以开始混合其他技术来简化任务,例如,您可以在使用 xpath 从 XmlDocument 中挑选出节点后使用 Server.UrlEncode 操作源 XML (codeproject.com/KB/cpp/myXPath.aspx),然后通过 XSLT 推送结果。真的取决于上下文。
  • 谢谢,这些样式表帮了大忙。
【解决方案2】:

在 XML(以及 XSL)中,您需要转义 &、> 和

&amp;
&lt;
&gt;

【讨论】:

  • +1,尽管您通常不需要转义&gt;w3.org/TR/2008/REC-xml-20081126/#syntax
  • 这可能是真的,这正在淡化人们的看法。记住&gt; 不是规则的例外会更简单(而且可能更好)。
【解决方案3】:

片段&lt;description&gt;one word &amp; another&lt;/description&gt; 类似于XML,但裸& 号是非法的。 XSL 需要合法的 XML。

在不替换 &amp;amp; 的情况下使其合法的一种方法是将文本放入 CDATA 部分:

<description><![CDATA[one word & another]]></description> 

【讨论】:

  • 绝对正确。我已经调整了我的代码 sn-p 来补偿。你对我的问题有答案吗,这实际上是关于如何用有效字符替换 URL 非法字符,即 URL 转义文本?
【解决方案4】:

您可以使用 XSLT 2.0 吗?我只提到它是因为有一个漂亮的 URL 编码功能可以解决你所有的问题..

<xsl:value-of select="url:encode('This is URL encoded')" />

【讨论】:

【解决方案5】:

就我而言,这些解决方案都不起作用。我在一个专有框架内工作,并使用实体:

&#38;

在 XSL 模板的上下文中,这是我能够将附加参数附加到 URI 字符串的唯一方法。

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2014-05-27
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多