2010-04-15 5 views
0

Je voudrais charger un document HTML et modifier son texte en PHP. Par exemple, si j'ai un document comme celui-ci:Modifier le contenu d'une page Web HTML à la volée en PHP

<html> 
<head><title>Test - Example.com</title></head> 
<body> 
<p><a href="http://www.example.com">Link number 1: Example.com</a></p> 
<p>Link number 2: Example.com - some random text</p> 
</body> 
</html> 

Je voudrais ajouter au deuxième alinéa un lien actif(). Mais je ne veux pas toucher d'autres endroits où la chaîne Example.com se produit, comme le premier paragraphe ou le titre du document. Je ne peux donc pas utiliser d'expressions régulières pour cela, car je dois prendre en compte la structure du document. Des idées sur la façon de résoudre ce problème? Les documents HTML que je recevrais pourraient aussi être des pages web en direct, donc ils pourraient contenir des erreurs, du code JavaScript, etc.

+0

Quels sont les critères de recherche pour le paragraphe à lier? Je ne suis pas sûr, je comprends pourquoi vous ne pouvez pas utiliser les expressions régulières, bien sûr XPath serait le meilleur choix, mais un vous dites: la page peut contenir des erreurs/XML non valide ... – Hinek

+0

Quelle est la condition que vous êtes Vous cherchez à déterminer ce qui devient un lien et ce qui reste intact? – ForCripeSake

+0

Je veux changer seulement le texte standard et ne pas toucher les hyperliens ou le texte inclus dans les commentaires HTML, les scripts, les URL, etc. – pako

Répondre

1

Le "bon" moyen de le faire serait via l'objet DOM de PHP, qui peut importer du HTML, après quoi vous pouvez utiliser XPath pour trouver le lien exact que vous voulez. Bien sûr, DOM est très pointilleux sur le balisage invalide et peut se focaliser sur des erreurs assez simples que les navigateurs gèrent bien. Vous devrez peut-être masser l'entrée pour corriger le pire des erreurs avant de pouvoir aller-retour du contenu via DOM.

Le pire stop-dead-in-DOM's pistes erreur j'ai trouvé est d'avoir de multiples HTML et/ou des blocs de corps (par exemple un serveur bête insertion d'un autonome <html> bloc avant que le contenu de la page réelle).

Questions connexes