XSLT转换后,HTML实体无法在浏览器中正确呈现
我有以下XML:XSLT转换后,HTML实体无法在浏览器中正确呈现,xslt,utf-8,character-encoding,xalan,Xslt,Utf 8,Character Encoding,Xalan,我有以下XML: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <example> <contactInfo> <id>12319221</id> <name>Jerry P</name> <market> <name>Test</name
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<example>
<contactInfo>
<id>12319221</id>
<name>Jerry P</name>
<market>
<name>Test</name>
<phone>800.555.1010</phone>
</market>
<agent>
<name>Test User</name>
<email>testuser@email.com</email>
</agent>
<summary>&#8220;Jerry just gets it!&#8221;</summary>
</contactInfo>
</example>
12319221
杰里P
试验
800.555.1010
测试用户
testuser@email.com
&#8220;杰瑞刚刚明白了&#8221;
保存此xml文档时,我将特殊字符编码为html实体,因此智能引号如何编码为“;和”
我通过Java/Xalan使用XSL将xml文档转换为html:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="wsHost"></xsl:param>
<xsl:param name="serverId"></xsl:param>
<xsl:template match="/showcase">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example</title>
</head>
<body>
<div id="profile">
<xsl:apply-templates/>
</div>
</body>
</html>
</xsl:template>
<!-- Contact Info section -->
<xsl:template match="/example/contactInfo">
<span class="sectionTitle">Contact Info:</span>
<div id="contactInfo">
<xsl:if test="name">
<strong>Candidate Name:</strong> <xsl:value-of disable-output-escaping="yes" select="name" /><br />
</xsl:if>
<xsl:if test="id">
<strong>Candidate ID:</strong> <xsl:value-of disable-output-escaping="yes" select="id" /><br />
</xsl:if>
<xsl:if test="market">
<xsl:if test="market/name">
<strong>Market Name:</strong> <xsl:value-of disable-output-escaping="yes" select="market/name" /><br />
</xsl:if>
<xsl:if test="market/phone">
<strong>Market Phone:</strong> <xsl:value-of disable-output-escaping="yes" select="market/phone" /><br />
</xsl:if>
</xsl:if>
<xsl:if test="agent">
<xsl:if test="agent/name">
<strong>Agent Name:</strong> <xsl:value-of disable-output-escaping="yes" select="agent/name" /><br />
</xsl:if>
<xsl:if test="agent/email">
<strong>Agent Email:</strong> <xsl:value-of disable-output-escaping="yes" select="agent/email" /><br />
</xsl:if>
</xsl:if>
<xsl:if test="summary">
<strong>Summary:</strong> <xsl:value-of disable-output-escaping="yes" select="summary" /><br />
</xsl:if>
</div>
<hr size="1" noshade="noshade" class="rule" />
</xsl:template>
</xsl:stylesheet>
例子
联系方式:
候选人姓名:和#160
候选人ID:和#160
市场名称:和#160
市场电话:和#160
代理名称:和#160
代理电子邮件:和#160
摘要:和#160
转换产生的html随后被写入浏览器。这里是我注意到字符编码问题的地方。(nbsp数值)显示为黑色菱形问号(firefox)或方框字符(ie),之前编码的实体(“/”)也显示为黑色菱形问号
此外,可能最大的提示是,在linux平台上转换此xml文件(然后将html写入firefox)时,所有内容都正确显示。只有在windows中完成转换时,才会出现字符编码问题(在firefox和ie中)
我是否对实体进行了错误编码,或者可能没有在某个地方指定字符集?您还没有将HTML文档中的编码设置为一个字符集。不知道这是否是问题所在,但这将是我第一次尝试解决 尝试添加:
你说你正在使用Java/Xalan。您正在为输出流或流编写器设置权限?如果是这样,则需要在该点显式设置编码:
... new OutputStreamWriter(stream,"UTF-8");
仅仅包含UTF8头实际上不会导致输出文件被UTF8编码。好的,我添加了:现在生成的html收到了一个带有内容类型的元标记:我希望能够呈现原始xml中包含的html标记(html可能格式不正确),这将要求我不要转义到&;书信电报;。但我也需要逃避—;至&#8212; (长连字符)否则它们将显示为来自windows的块(包括firefox/ie)。我应该逃避一些而不是其他吗?老实说,我onyl发布了一个答案,因为没有附加到HTML的编码跳到我身上。。。我很少使用XSL/XSLT,所以我不确定能否准确回答您的评论。但是我想知道如果您将html NS添加到xml文件中的某些元素中,它会如何改变事情。。。这对你的转变有帮助吗?或者这是因为可能的畸形而被禁止的?另外,将包含html的元素的内容包装在CDATA部分是否更好?同意。如果在十六进制查看器中检查Windows框中的HTML输出,您可能会看到智能引号为
93
和94
,以及nbsasA0
——它们的Windows-1252编码。它在Linux机器上的工作方式与您期望的一样,因为UTF-8恰好是该平台的默认编码。