J'essaie d'analyser un document et d'obtenir toutes les balises d'image et de modifier la source pour quelque chose de différent.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><p>Hi, this is a test, here is an image<img src="lalala" width="68" height="95"> Because I like Beer!</p></body></html>
5 Réponses :
Si vous allez enregistrer en tant que HTML, vous devez vous attendre à ce qu'un document HTML valide soit créé!
Il y a une autre option: DOMDOCUMUMENT :: SAVEXML CODE>
a un paramètre facultatif vous permettant d'accéder au contenu XML d'un élément particulier: P> < PRE> XXX PRE>
Ceci suppose que votre contenu n'a qu'un seul p code>. p> p>
Selon les éléments d'occasion à l'intérieur du document, il n'est pas toujours une bonne idée d'utiliser SaveXML () pour récupérer une source HTML. Le XML créé utilisera le raccourci pour tous les éléments sans contenu, ce qui endommagera le document HTML (E.G. code>). Vous aurez besoin d'analyser le résultat et de le corriger ou de le transformer en utilisant XSLT pour obtenir un document HTML valide.
Si vous faites un piratage, c'est ainsi que j'ai réussi à contourner cette contrariété. Chargez la chaîne en tant que XML et enregistrez-la en HTML. :) p>
Domdocument est malheureusement retardé et ne vous laissera pas faire cela. Essayez ceci:
il devrait se lire: $ text = prg_replace ('/ ^ /', '', str_replace (tableau ('', HTML> ',' < / corps> '), tableau (' ',' '', '' ',' ''), $ DOMDOCUMUMUMUMENT-> sauvegardhtml ()));
Preg_replace CODE>, vraiment?
Vous pouvez utiliser http://beerpla.net/projects/ SmartDomDocument-a-smarter-php-dampdocument-classe / : p>
DOMDOCUMUMUMUM a une "fonctionnalité" extrêmement conçue où si le code HTML que vous chargez ne contient pas et ne contient pas de balises, il les ajoute automatiquement (yup, il n'y a pas d'indicateurs pour transformer ce comportement). P>
Ainsi, lorsque vous appelez $ DOC-> sauvegardehtml (), votre contenu nouvellement enregistré est maintenant et DOCTYPE. Pas très pratique lorsque vous essayez de travailler avec des fragments de code (XML a un problème similaire). P>
SmartDomDocument contient une nouvelle fonction appelée SaveHTMlexact () qui fait exactement ce que vous voudriez - cela enregistre HTML sans ajouter que DOMDocument effectue. P>
Vous devez juste ajouter 2 indicateurs à la méthode voir iDone Demo : p> loadhtml () code>:
libxml_html_noimplied | libxml_html_nodefdtd code>. Ie
<p>Hi, this is a test, here is an image<img src="lalala" width="60" height="95"> Because I like Beer!</p>
Pour moi, il suffit de supprimer tout HTML hors de là. Mes paragraphes sont partis aussi.
@Mike: C'est impossible car le code ne supprime rien. Peut-être que le HTML que vous avez n'est pas entièrement valide. Essayez d'ajouter libxml_use_internal_errors (true); code> avant d'initialiser le DOMDOCUMUME avec
$ DOMDOCUMUMUMENT = nouveau DOMDOCUMUMUMENT; CODE>.
@ Wiktorstribiżew Je l'utilisais pour éliminer les étiquettes de script à partir d'un champ de texte selon ici: Stackoverflow.com/questions/7130867/...
Cela devrait être la réponse acceptée