PHP文档、Unicode问题

PHP文档、Unicode问题,php,character-encoding,domdocument,Php,Character Encoding,Domdocument,我这里有些问题 $source = "<html><body><h1>&#8220;</h1></body></html>"; $dom = new DOMDocument(); $dom->loadHTML($source); echo $dom->saveHTML(); $source=““;”; $dom=新的DOMDocument(); $dom->loadHTML($source);

我这里有些问题

$source = "<html><body><h1>&#8220;</h1></body></html>";
$dom = new DOMDocument();
$dom->loadHTML($source);
echo $dom->saveHTML();
$source=““;”;
$dom=新的DOMDocument();
$dom->loadHTML($source);
echo$dom->saveHTML();
输出:

&ldquo

好的,这是正确的。 但是如果我想像这样提取节点

$source = "<html><body><h1>&#8220;</h1></body></html>";
$dom = new DOMDocument();
$dom->loadHTML($source);
$h1 = $dom->getElementsByTagName('h1');
echo $dom->saveHTML($h1->item(0));
$source=““;”;
$dom=新的DOMDocument();
$dom->loadHTML($source);
$h1=$dom->getElementsByTagName('h1');
echo$dom->saveHTML($h1->item(0));
它会输出无法识别的文本

œ


有人知道如何解决这个问题吗?

您需要domdocument构造函数(checkout)的第二个参数:


您的代码示例适用于我,输出为

那么,您在哪里查看该输出

可能在windows上的浏览器中?如果在浏览器中,是否尝试添加

header('Content-Type: text/html; charset=utf-8');
在你的剧本之上


另请参见:和。

所有这些DOM函数都返回UTF-8编码的字符串,最好查看手册。除了正确显示之外,没有什么需要解决的问题,例如,通过正确配置响应标题或使用浏览器中的菜单告知浏览器,如果您不知道如何告知浏览器,您可以在其中指定字符集编码ser自动。请查看我用来加载已编码的HTML源代码&8220;。当$dom->saveHTML()时,它会正确输出,但如果我打印选定的节点,$dom->saveHTML($nodes),它会输出到未知的unicode;这可能是
$node
参数的缺陷(当
saveHTML
w/o
$node
不使用实体时,不使用实体)。
&ldquo;    <ENTITY TYPE="#8220"/>    “    Left double quotation mark
0xE2 (226) 0x80 (128) 0x9C (156)
 |          |           `------ Windows-1252: œ
 |          `--- most Windows 125x encodings: €
 `--- ISO 8859-1, 2, 3, 4, 9, 10, 14, 15, 16: â
header('Content-Type: text/html; charset=utf-8');