Tengo una función que reemplaza el atributo href de los anclajes en una cadena usando DOMDocument de Php. He aquí un fragmento:¿Cómo evito que DOMDocument de Php codifique entidades 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();
El problema es que loadHTML ($ texto) rodea el texto en el tipo de documento $, html, cuerpo, etc. etiquetas. He intentado trabajar alrededor de esto haciendo esto en vez de loadHTML():
$doc = new DOMDocument('1.0', 'UTF-8');
$node = $doc->createTextNode($text);
$doc->appendChild($node);
...
Desafortunadamente, esto codifica todas las entidades (anclajes incluidos). ¿Alguien sabe cómo apagar esto? Ya he examinado detenidamente los documentos e intenté hackearlo, pero no puedo resolverlo.
Gracias! :)
loadHTML, ninguna traducción de entidad ocurre. Terminé pirateando el problema de una manera tenue ejecutando mb_substr ($ text, 122, -19); en el resultado de $ doc-> saveHTML(). ¡Ay! :) $ texto es una cadena traducida con etiquetas de anclaje de marcador de posición, por lo que la sustitución debe realizarse durante el tiempo de ejecución.Preferiría no analizar todo el documento, ya que sería difícil analizar únicamente los enlaces traducidos. Buena idea sin embargo. – thesmart