PHP的DOMDocument类混淆了UTF-8输入unless you prepare your input first。
例如,此代码
<?php
echo mb_internal_encoding()."\n\n";
$str = '’';
$dom = new DOMDocument;
$dom->loadHTML($str);
echo $dom->saveHTML();
产生此输出
UTF-8
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>’</p></body></html>
’
应为’
。
如果你不使用the fix,我想知道DOMDocument可能产生的所有字符实体,如â
。某个地方有名单吗?它是在PHP源代码中吗? LibXML源代码?
答案 0 :(得分:0)
我想到了一种在不阅读任何参考或源代码的情况下找到的方法:
<?php
$str = '';
for ($i = 1; $i < 256; $i++) {
$str .= chr($i)."\n";
}
$str .= chr(0)."\n";
$dom = new DOMDocument;
$dom->loadHTML($str);
echo $dom->saveHTML();
如果您需要一个正确的列表,那么我建议您在自己的系统上运行它以获取自己的列表,以防它在不同版本的PHP等中有所不同。
期待很多警告信息,但没有错误。
这是我得到的输出,除了我用文本编辑器删除了非字符实体:
&
€

‚
ƒ
„
…
†
‡
ˆ
‰
Š
‹
Œ

Ž


‘
’
“
”
•
–
—
˜
™
š
›
œ

ž
Ÿ
¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
­
®
¯
°
±
²
³
´
µ
¶
·
¸
¹
º
»
¼
½
¾
¿
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ