如何转义URL中的方括号

时间:2013-11-05 21:41:39

标签: url xslt xslt-2.0 saxon

我有一组来自Solr的记录,其中field[@name='url']可以采用以下格式:

http://url/blabla/blabla.aspx?sv=[keyword%20keyword,%201]

我的理解是方括号表示数组语法,我想使用XSLT从所有URL中删除方括号。

我正在使用一个Open URL解析器,它目前不能很好地处理这些字符。最好的选择是在开放URL解析器调解此类资源之前从所有URL中删除方括号。

在某些情况下,每个网址都会出现多次方括号。

3 个答案:

答案 0 :(得分:3)

如果您使用身份转换模板和

<xsl:template match="field[@name='url']">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:value-of select="replace(., '\[\]', '')"/>
  </xsl:copy>
</xsl:template>

你有一个删除括号的XSLT 2.0样式表。

答案 1 :(得分:2)

为什么要删除方括号而不是转义它们?我的直觉是使用函数iri-to-uri(),它将对它们进行百分比编码:

http://www.w3.org/TR/xpath-functions-30/#func-iri-to-uri

答案 2 :(得分:1)

我已根据Martin和Michael的推荐测试了两种解决方案。发送给OpenURL的网址包含ID和实际网址,如下所示:

  <openurl><xsl:value-of select="concat(field[@name='id'],'/', field[@name='url'])" /><openurl>

我首先使用fn:replace,如下:

  <openurl><xsl:value-of select="concat(field[@name='id'],'/', replace(field[@name='url'], '\[\]', ''))" /><openurl>

然后

<openurl><xsl:value-of select="concat(field[@name='id'],'/', iri-to-uri(field[@name='url']))" /></openurl>

查看XML,网址仍​​显示方括号。相当困惑的是,我进行了一些额外的测试。最后,我尝试使用fn:encode-for-uri,并使用%xx格式的转义序列替换方括号。然而,由OpenUrl调解的最终URl以某种方式重新格式化并且方括号再次出现。我目前正在调查这个问题。

非常感谢,