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 был преобразован в &
):
<!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&foo=bar">Foo</a></body></html>
Кроме того, во время вызова $dom->loadHTML($html);
были выведены следующие предупреждения...
Я понятия не имею, что это значит.Предупреждение: DOMDocument:: loadHTML (): htmlParseEntityRef: expecting '; ' in Сущность, строка: 1
Я что-то упустил?
1 ответ:
Символ амперсанда используется в допустимом / совместимом XHTML для определения символов сущности HTML.
Смотрите этот список ссылок: http://www.w3schools.com/tags/ref_entities.asp
Ваш DOMDocument жалуется, поскольку он обнаружил недопустимое определение символа на входе и исправил его на выходе.