PHP的DOMDocument类会弄乱UTF-8输入,除非你先准备输入。
例如,此代码
<?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>
’
应该是’
.
我想知道如果您不使用修复程序,DOMDocument 可能会产生的所有角色实体,例如 â
。某处有列表吗?它在PHP源代码中吗?LibXML源代码?
我想到了一种无需阅读任何参考资料或源代码即可找到的方法:
<?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 等中有所不同。
预计会有很多警告消息,但没有错误。
这是我得到的输出,除了我使用文本编辑器删除了非字符实体:
&
€

‚
ƒ
„
…
†
‡
ˆ
‰
Š
‹
Œ

Ž


‘
’
“
”
•
–
—
˜
™
š
›
œ

ž
Ÿ
¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
­
®
¯
°
±
²
³
´
µ
¶
·
¸
¹
º
»
¼
½
¾
¿
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ