我想用它的编码值%26替换动态生成的一段文本中的&符号,以防止它打断URL字符串。我将文本存储在hrefvalue变量中。我的目标是将&替换为%26,以便在浏览器的最终HTML代码中输出。
例如:“听力与理解”应改为“听力%26理解”。
我正在使用<![CDATA[来保存%26,但这似乎不起作用。我仍然会在浏览器中看到“倾听和理解”。为什么?
<xsl:variable name="hrefvalue" select="./node()" />
<xsl:choose>
<xsl:when test="contains($hrefvalue, '&')">
<xsl:variable name="string-before" select="substring-before($hrefvalue, '&')" />
<xsl:variable name="string-after" select="substring-after($hrefvalue, '&')" />
<xsl:variable name="ampersand"><![CDATA[%26]]></xsl:variable>
<xsl:value-of select="concat($string-before, $ampersand, $string-after)" disable-output-escaping="yes" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$hrefvalue" disable-output-escaping="no" />
</xsl:otherwise>
</xsl:choose>我正在开发一个使用XSL 1.0的系统
发布于 2020-10-25 03:38:31
首先,CDATA是完全不必要和无关紧要的。CDATA的唯一目的是允许在不进行转义的情况下写入&和<,如果不存在这些特殊字符,CDATA标记没有任何区别。
此外,如果您正在生成一个属性(如果它是一个URL,则很可能是这样),那么停用-输出-转义将不起作用。但同样,它可能不是必需的。
您的代码只处理字符串中的一个“与”号。
但是您的代码看起来很好。如果有问题,那就是代码中你没有展示给我们的部分。尝试构建一个完整的可重现示例:一个完整的样式表和源文档,我们可以实际运行它们来查看是否可以重现问题。
https://stackoverflow.com/questions/64517077
复制相似问题