Класс 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 и т. Д.
Ожидайте много предупреждений, но без ошибок.
Вот вывод, который я получаю, за исключением того, что я удалил не символьные объекты с помощью текстового редактора:
&
€

‚
ƒ
„
…
†
‡
ˆ
‰
Š
‹
Œ

Ž


‘
’
“
”
•
–
—
˜
™
š
›
œ

ž
Ÿ
¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
­
®
¯
°
±
²
³
´
µ
¶
·
¸
¹
º
»
¼
½
¾
¿
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ
Других решений пока нет …