Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT转换后,HTML实体无法在浏览器中正确呈现_Xslt_Utf 8_Character Encoding_Xalan - Fatal编程技术网

XSLT转换后,HTML实体无法在浏览器中正确呈现

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:

<?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>&amp;#8220;Jerry just gets it!&amp;#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>&#160;<xsl:value-of disable-output-escaping="yes" select="name" /><br />
        </xsl:if>

        <xsl:if test="id">
            <strong>Candidate ID:</strong>&#160;<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>&#160;<xsl:value-of disable-output-escaping="yes" select="market/name" /><br />
            </xsl:if>

            <xsl:if test="market/phone">
                <strong>Market Phone:</strong>&#160;<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>&#160;<xsl:value-of disable-output-escaping="yes" select="agent/name" /><br />
            </xsl:if>

            <xsl:if test="agent/email">
                <strong>Agent Email:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="agent/email" /><br />
            </xsl:if>
        </xsl:if>

        <xsl:if test="summary">
                <strong>Summary:</strong>&#160;<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
,以及nbsas
A0
——它们的Windows-1252编码。它在Linux机器上的工作方式与您期望的一样,因为UTF-8恰好是该平台的默认编码。