2010-05-30 6 views
3

J'ai besoin d'un analyseur HTML SAX (pas DOM!) Pour PHP capable de traiter du code HTML même invalide. La raison pour laquelle j'en ai besoin est de filtrer le code HTML saisi par l'utilisateur (supprimer tous les attributs et les balises sauf ceux autorisés) et tronquer le contenu HTML à la longueur spécifiée.Analyseur PHP SAX pour HTML?

Des idées?

+0

salut, je suis actuellement à la recherche d'un tel moi-même. Je me demande si vous utilisez encore HTML SAX Parser, ou si vous avez trouvé quelque chose d'autre? – aurora

+0

Tidy est la "solution générale" unique pour "code HTML invalide", et PHP a un * SAX * intégré bon (!) Voir [ma réponse ci-dessous] (http://stackoverflow.com/a/17903058/287948). –

+0

Voir une question similaire: http: // stackoverflow.com/q/15679103/287948 –

Répondre

4

SAX a été conçu pour traiter un XML valide et échouer sur un balisage non valide. Le traitement d'un balisage HTML invalide nécessite de conserver plus d'états que les parseurs SAX.

Je ne suis pas au courant d'un analyseur semblable à SAX pour HTML. Votre meilleur coup est d'utiliser pour passer le code HTML par le biais avant et ensuite utiliser un analyseur XML, mais cela peut aller à l'encontre de votre but d'utiliser un analyseur SAX en premier lieu.

+0

même après des morceaux bien rangés de HTML ne sera pas valide. ils sont comme ceci: 'un commentaire avec texte en gras, texte en italique .' c'est un document non valide pour tout analyseur XML. il n'y a pas de racine, mais je ne veux pas déranger avec le contenu d'emballage avec un élément racine. – Daniel

+0

@Daniel Pourquoi avez-vous besoin d'un gestionnaire d'événements en premier lieu. Si les extraits HTML sont courts, je ne vois aucune raison impérieuse. – Artefacto

+0

quel gestionnaire d'événements? 0o – Daniel

1

Essayez d'utiliser HTML SAX Parser

+0

J'ai essayé de l'utiliser, il ne peut pas gérer js intégré ou styles complexes parce que c'est basé sur des regex – Daniel

+0

Je l'ai utilisé pour résoudre le problème que vous essayez de résoudre.Je filtre le contenu généré par l'utilisateur, couper le JavaScript, les balises, les attributs. – murad

1

Résumer en deux étapes:

  1. Utilisez Tidy pour transformer "sans HTML" en « bon XHTML ".
  2. Utilisez XML Parser pour analyser XHTML en XML par SAX API.

Utilisez d'abord Tidy (!), Pour transformer "HTML libre" en XHTML (ou lorsque vous ne pouvez pas faire confiance à votre "soi-disant XHTML"). Voir la méthode cleanRepair. Il faut plus de temps, mais fonctionne avec de gros fichiers (!) ... Set some minutes as maximum execution time si trop grand.

Une autre option (pour travailler avec de gros fichiers) est de mettre en cache vos fichiers XHTML après avoir été cochés ou transformés en XHTML. Voir la méthode repairfile de Tidy. Avec un "XHTML de confiance", utilisez SAX ... Comment utiliser SAX avec PHP?

XML Parse avec un SAX standard API, que PHP est mis en œuvre par LibXML (voir LibXML2 à xmlsoft.org), et son interface est le PHP's XML Parser, qui est proche de l'API standard SAX.

Une autre façon d'utiliser le "SAX de LibXML2", avec une autre interface (un PHP iterator au lieu de l'interface SAX traditionnelle), est d'utiliser XMLReader. Voir this explanation about "XMLReader use SAX". Oui, les termes "SAX" ou "API SAX" ne sont pas exprimés dans le manuel PHP (!!). Voir this old but good introduction.

Questions connexes