У меня есть функция, которая заменяет атрибут href якоря в строке, используя DOMDocument от Php. Вот отрывок:Как предотвратить DOMDocument Php от кодирования объектов html?
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($text);
$anchors = $doc->getElementsByTagName('a');
foreach($anchors as $a) {
$a->setAttribute('href', 'http://google.com');
}
return $doc->saveHTML();
Проблема заключается в том, что loadHTML ($ текста) окружает $ текст DOCTYPE, HTML, тела и т.д. теги. Я пытался работать вокруг этого, делая это вместо loadHTML():
$doc = new DOMDocument('1.0', 'UTF-8');
$node = $doc->createTextNode($text);
$doc->appendChild($node);
...
К сожалению, это кодирует все объекты (якорей включены). Кто-нибудь знает, как отключить это? Я уже тщательно просмотрел документы и попытался взломать его, но не могу понять.
Спасибо! :)
loadHTML, нет перевода сущности. Я в конечном итоге взломал проблему непродолжительным образом, запустив mb_substr ($ text, 122, -19); на результат из $ doc-> saveHTML(). Хлоп! :) $ текст - это переведенная строка с метками привязки места, поэтому замена должна выполняться во время выполнения.Я бы предпочел не разобрать весь документ, так как было бы трудно разобрать только переведенные ссылки. Хорошая идея. – thesmart