DOMDocument saveHTML неверно кодирует атрибуты href


Я использую DOMDocument для загрузки некоторых пользовательских HTML-блоков, а затем манипулирую ими. Похоже (при условии, что я все делаю правильно), что DOMDocument запускает URL-адреса внутри атрибута href через htmlentities. Это делает мои якорные теги, которые имеют амперсанды в строке запроса, неверными.

Пример:

$html = <<<HTML
<a href="http://foo.com?bar=baz&foo=bar">Foo</a>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html);

echo $dom->saveHTML();

Вывод становится (обратите внимание, что & в url был преобразован в &amp;):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><a href="http://foo.com?bar=baz&amp;foo=bar">Foo</a></body></html>

Кроме того, во время вызова $dom->loadHTML($html); были выведены следующие предупреждения...

Предупреждение: DOMDocument:: loadHTML (): htmlParseEntityRef: expecting '; ' in Сущность, строка: 1

Я понятия не имею, что это значит.

Я что-то упустил?

1 3

1 ответ:

Символ амперсанда используется в допустимом / совместимом XHTML для определения символов сущности HTML.

Смотрите этот список ссылок: http://www.w3schools.com/tags/ref_entities.asp

Ваш DOMDocument жалуется, поскольку он обнаружил недопустимое определение символа на входе и исправил его на выходе.