2012-02-04 3 views
0

Я использую код, как ниже, чтобы получить нужный вид контента 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, но я не получил улучшения, возможно, я использовал его неправильно? некоторые примеры кода были бы очень полезными.

+0

Я думаю, что они в полном порядке. Оба URL являются действительными и одинаковыми. –

+0

Это не объекты HTML. Это URL-специфические экраны. И, по крайней мере, интерфейс PHP для libxml [не предоставляет никакой опции] (http://php.net/manual/en/libxml.constants.php), чтобы повлиять на эту нормализацию. – mario

+0

[Пробелы и разрывы строк на самом деле недействительны в URL-адресах.] (Http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid/1547940#1547940) Это просто допуск браузеров (или DOMDocument), которые обрабатывают надлежащим образом для их правильной кодировки. – Gumbo

ответ

2

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

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

Смежные вопросы