Я использую код, как ниже, чтобы получить нужный вид контента HTML по DOMDocument,Как отключить преобразование специальных символов в объекты в DOMDocument?
$subject = 'some html code';
$doc = new DOMDocument('1.0');
$doc->loadHTML($subject);
$xpath = new DOMXpath($doc);
$result = $xpath->query("//div");
$docSave = new DOMDocument('1.0');
foreach ($result as $node) {
$domNode = $docSave->importNode($node, true);
$docSave->appendChild($domNode);
}
echo $docSave->saveHTML();
Проблема в том, что если есть spcial символ в HTML $ теме, как пространство или новой линии, то она преобразуется to html entitle. Ввод HTML далеко форма быть в хорошем стиле и некоторые специальные символы также находятся в пути в тегах, например:
$subject = '<div><a href='http://www.site.com/test.php?a=1&b=2, 3,
4'></a></div>';
будет производить:
<div><a href='http://www.site.com/test.php?a=1&b=2,%203,%0A%204'></a></div>
вместо:
<div><a href='http://www.site.com/test.php?a=1&b=2, 3,
4'></a></div>'
Что можно сделать, чтобы опустить преобразование специальных символов в свои объекты, если вы хотите сохранить недопустимый html?
Я попытался установить этот флаг substituteEntities на false, но я не получил улучшения, возможно, я использовал его неправильно? некоторые примеры кода были бы очень полезными.
Я думаю, что они в полном порядке. Оба URL являются действительными и одинаковыми. –
Это не объекты HTML. Это URL-специфические экраны. И, по крайней мере, интерфейс PHP для libxml [не предоставляет никакой опции] (http://php.net/manual/en/libxml.constants.php), чтобы повлиять на эту нормализацию. – mario
[Пробелы и разрывы строк на самом деле недействительны в URL-адресах.] (Http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid/1547940#1547940) Это просто допуск браузеров (или DOMDocument), которые обрабатывают надлежащим образом для их правильной кодировки. – Gumbo