Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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
Php 如果调用print#r,则字符编码正确,如果不是';T_Php_Xml_Xslt - Fatal编程技术网

Php 如果调用print#r,则字符编码正确,如果不是';T

Php 如果调用print#r,则字符编码正确,如果不是';T,php,xml,xslt,Php,Xml,Xslt,我遇到了一个奇怪的问题,我确信这是一个编码错误,但在解决这个错误时,PHP显示了一个奇怪的行为,我希望有人能帮助我理解 我有一些xml是通过XQuery生成的: 伦敦大英图书馆哈雷2251: 啊,耶路撒冷的一切 伦敦大英图书馆哈雷2255: "伊鲁萨里姆的阿勒耶·杜阿伦ħ 朗梅尔福德,圣三一教堂-克洛普顿尚特里教堂: 伊鲁萨琳的一切 剑桥耶稣学院Q.G.8: 伊鲁萨勒姆所有的强人。 牛津,博德莱安图书馆,劳德683: 阿勒ẏjerusaleem的e Doutren 牛津圣约翰学院56: 哦,所

我遇到了一个奇怪的问题,我确信这是一个编码错误,但在解决这个错误时,PHP显示了一个奇怪的行为,我希望有人能帮助我理解

我有一些xml是通过XQuery生成的:


伦敦大英图书馆哈雷2251:
啊,耶路撒冷的一切
伦敦大英图书馆哈雷2255:
"伊鲁萨里姆的阿勒耶·杜阿伦ħ
朗梅尔福德,圣三一教堂-克洛普顿尚特里教堂:
伊鲁萨琳的一切
剑桥耶稣学院Q.G.8:
伊鲁萨勒姆所有的强人。
牛津,博德莱安图书馆,劳德683:
阿勒ẏjerusaleem的e Doutren
牛津圣约翰学院56:
哦,所有的道格特伦/耶路撒冷؛
然后我将其导入php:

$text = exec ("java -cp saxon9he.jar net.sf.saxon.Query -t -q:test.xq");

$xml = new DOMDocument;
$xml->loadXML($text);

$xsl = new DOMDocument;
$xsl->load('comparison.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

echo $proc->transformToXML($xml);
并将xsl样式表附加到它

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="list">
    <div class="comparison">
        <ul>
            <xsl:apply-templates/>
        </ul>
    </div>
</xsl:template>
<xsl:template match="item">
    <li>
        <xsl:apply-templates/>
    </li>
</xsl:template>

  • 但是,当我这样做时,结果输出的编码在非标准字符上变得奇怪,如下所示:

    我的假设是这是结果的编码问题,所以我添加了一个print_r语句来显示生成的原始xml和DOM树,然后刷新


    我不怀疑这是一个编码错误,我计划跟踪它,但我想知道的是,如果我添加一个print\r语句,它为什么会正确显示,如果我不添加,它就不会正确显示。有什么我应该添加到php文件中,但我没有?谢谢

    您的XSLT输出的HTML编码为UTF-8,但PHP中没有类似的编码,因此很可能默认为系统编码,在Windows上可能是CP1252或ISO-8859-1,在基于MacOS的计算机上可能是Mac OS Roman

    使用
    print\r
    获得某种可读性的输出的原因是该指令正在尽力获取UTF-8字符串并使用默认编码进行打印

    要查看此效果,请在浏览器中,通过单击“视图”>“编码”>“Unicode”强制编码(此菜单的实际位置因浏览器而异)。手动切换到Unicode后,您应该会看到正确的文本


    下一步是修复PHP脚本的输出编码。它必须首先指示浏览器您的页面是UTF-8而不是ISO-8859-1。第二个答案可能还需要强制PHP对任何和所有输出语句使用UTF-8。

    谢谢,这是一个很好的解释,我的问题解决了。