我正在开发一个数据聚合项目,我需要将来自各种数据提供者的XML数据转换为通用格式,这需要对数据集中的所有URI值进行适当的转义。这是我从数据提供者处收到的示例URI。它在路径组件中包含保留字符(“[”,“]”):
http://ogimages.bl.uk/images/001/001ROY000018D03U00107000[SVC1].jpg
这是我需要的转义表单:
http://ogimages.bl.uk/images/001/001ROY000018D03U00107000%5BSVC1%5D.jpg
我计划使用XSLT和EXSLT编码-ri函数(http://www.exslt.org/str/functions/encode-uri/str.encode-uri.html)在转换时转义URI。目前我使用它如下:
xsl:value-of select="str:encode-uri(., true())"/>
它会转义完整的URI并导致
http%3A%2F%2Fogimages.bl.uk%2Fimages%2F001%2F001ROY000018D03U00107000%5BSVC1%5D.jpg
这不是我需要的,因为我想保留URI保留字符,如果它们在正确的位置。
如果我使用encode-uri函数如下
xsl:value-of select="str:encode-uri(., false())"/>
括号不会被转义,因为在使用布尔错误标志调用时,encode-uri函数不会转义保留字符。
所以我想,我需要的是在URI的各个路径组件上应用URI编码。是否有任何现有的功能,或者我需要在XSL(T)中启动URI解析?
THX
答案 0 :(得分:2)
我认为您需要启动URI解析。
原因是您的数据提供程序将保留字符捣碎为特殊内容(例如/
作为路径组件分隔符)以及不具有其特殊含义的保留字符,并且需要进行转义(例如{ {1}})。 [
函数怎么能知道逃避哪个以及哪个单独留下?
所以是的,你需要开始解析URI。如果您确信没有encode-uri()
字符需要转义,我会
/
未触及的http(s)://
通过tokenize()
/