Question

Je recherche de bonnes méthodes pour manipuler du HTML en PHP.Par exemple, le problème que je rencontre actuellement concerne le HTML mal formé.

Je reçois une entrée qui ressemble à ceci :

<div>This is some <b>text

Comme vous l'avez remarqué, il manque des balises de fermeture dans le code HTML.Je pourrais utiliser une expression régulière ou un analyseur XML pour résoudre ce problème.Cependant, il est probable que je devrai effectuer d’autres manipulations du DOM à l’avenir.Je me demande s'il existe de bonnes bibliothèques PHP qui gèrent la manipulation du DOM de la même manière que Javascript traite la manipulation du DOM.

Était-ce utile?

La solution

PHP a une extension PECL qui vous donne accès aux fonctionnalités de HTML Tidy.Tidy est une bibliothèque assez puissante qui devrait être capable de prendre du code comme celui-ci et de fermer les balises de manière intelligente.

Je l'utilise pour nettoyer les fichiers XML et HTML mal formés qui m'ont été envoyés par un système de petites annonces avant l'importation.

Autres conseils

J'ai trouvé que PHP Simple HTML DOM était la bibliothèque la plus utile et la plus simple à ce jour.Mieux que PECL je dirais.

J'ai écrit un article sur comment l'utiliser pour gratter les dates de tournée des artistes sur Myspace (juste un exemple.) Voici un lien vers le analyseur php simple html dom.

La bibliothèque DOM désormais intégrée peut résoudre ce problème facilement.La méthode LoadHTML acceptera le XML mal formé, contrairement à la méthode Load.

$d = new DOMDocument;
$d->loadHTML('<div>This is some <b>text');
$d->saveHTML();

Le résultat sera :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
  <body>
    <div>This is some <b>text</b></div>
  </body>
</html>

Pour manipuler le DOM, je pense que ce que vous cherchez est ce.J'avais l'habitude d'analyser des documents HTML sur le Web et cela a bien fonctionné pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top