我一直在研究XSLT文档。当我进行转换时,特殊字符(引号,双引号等......)显示为菱形,其中包含一个空格标记。我正在使用UTF-8编码和Altova xml间谍软件,请告诉我如何解决它。
我在第一行声明了我的编码。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ntw="Number2Word.uri" exclude-result-prefixes="ntw">
<xsl:output method="html"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="ThisDocument" select="document('')"/>
<xsl:template match="/">
<xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE html>]]></xsl:text>
<html>
<head>
<xsl:text disable-output-escaping="yes"><![CDATA[</meta>]]></xsl:text>
<title>
<xsl:value-of select="part/title"/>
</title>
<link rel="stylesheet" href="main.css" type="text/css"/>
<xsl:text disable-output-escaping="yes"><![CDATA[</link>]]></xsl:text>
</head>
<body>
<xsl:apply-templates select="part"/>
<section class="tr_footnotes">
<hr/>
<xsl:apply-templates select="//footnote" mode="footnote"/>
</section>
</body>
</html>
作为替代方案,我也尝试过以下内容。
<xsl:output method="html" encoding="utf-8"/>
但结果没有变化。
感谢。
答案 0 :(得分:0)
这是非常可怕的代码。我不知道是否可以解决这个问题,但是如果给我这个任务,我的第一个动作就是清理它。
由于您使用的是输出方法HTML,因此不需要元元素和链接元素的结束标记,因此只需删除生成它们的可怕的禁用 - 输出 - 转义代码。 !DOCTYPE行有点棘手,因为XSLT 2.0不支持直接生成HTML5,但是,你可以在这里找到一个不依赖于disable-output-escaping的更干净的解决方案:
How to output <!DOCTYPE html> with XSLT
回到你真正的问题:为什么浏览器没有正确显示特殊字符?答案是文档的编码不是浏览器认为的。我不明白为什么应该这样做;一种可能性是你在生成它并将其发送到改变编码的浏览器之前已经对文档做了一些事情;另一种可能是HTTP标头错误。