Как отключить преобразование специальных символов в сущности в DOMDocument? - PullRequest
0 голосов
/ 04 февраля 2012

Я использую код, приведенный ниже, чтобы получить требуемый контент из HTML от 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();

Проблема в том, что если в теме HTML $ есть специальный символ, такой как пробел или новая строка, тоэто преобразовано в право html.Входной 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, ноУ меня нет улучшений, может я неправильно это использовал?некоторые примеры кода были бы очень полезны.

1 Ответ

2 голосов
/ 04 февраля 2012

Вы не можете использовать парсер и иметь возможность манипулировать плохим HTML.Парсер очистит HTML, чтобы проанализировать его.

Если вам абсолютно необходимо использовать плохой HTML, используйте регулярные выражения, но имейте в виду, что существует очень высокий риск получения травмы головы, так как вы будете либо -brick 'd- или слишком сильно биться головой о стол.

...