J'ai essayé d'analyser le code HTML5 afin de pouvoir définir des attributs / valeurs dans le code, mais il semble que DOMDocument (PHP5.3) ne prend pas en charge les balises comme <nav>
et <section>
.
Existe-t-il un moyen d'analyser cela en HTML en PHP et de manipuler le code?
Code à reproduire:
<?php
$dom = new DOMDocument();
$dom->loadHTML("<!DOCTYPE HTML>
<html><head><title>test</title></head>
<body>
<nav>
<ul>
<li>first
<li>second
</ul>
</nav>
<section>
...
</section>
</body>
</html>");
Erreur
Attention: DOMDocument :: loadHTML (): Tag nav invalide dans Entity, ligne: 4 dans /home/wbkrnl/public_html/new-mvc/1.php en ligne 17
Avertissement: DOMDocument :: loadHTML (): Section de balise invalide dans Entity, ligne: 10 dans /home/wbkrnl/public_html/new-mvc/1.php à la ligne 17
php
html
domdocument
Klaas Sangers
la source
la source
loadHTML($HTML5)
renvoie FALSE (échec)! J'ai besoin de changer les nouvelles balises en DIV ... Ce n'est pas seulement un problème de "warnings" sur mon écran.Réponses:
Non, il n'y a aucun moyen de spécifier un doctype particulier à utiliser ou de modifier les exigences de l'existant.
La meilleure solution possible sera de désactiver les rapports d'erreurs avec
libxml_use_internal_errors
:la source
loadHTML($HTML5)
renvoie FALSE (échec)! Je dois changer les nouvelles balises en DIV ...loadHTML
accepte désormais les balises HTML5.Tu pourrais aussi faire
la source
@
oulibxml_*
)Vous pouvez filtrer les erreurs que vous obtenez de l'analyseur. Comme pour les autres réponses ici, désactivez le rapport d'erreurs à l'écran, puis parcourez les erreurs et n'affichez que celles que vous voulez:
Voici une
print_r()
erreur unique:En faisant correspondre le
message
et / ou lecode
, ceux-ci peuvent être filtrés assez facilement.la source
Il ne semble pas y avoir de moyen de supprimer les avertissements mais pas les erreurs. PHP a des constantes censées faire cela, mais elles ne semblent pas fonctionner. Voici ce qui DEVRAIT fonctionner, mais pas parce que (bug?) ....
http://php.net/manual/en/libxml.constants.php
la source
Cela a fonctionné pour moi:
Si vous avez besoin de la balise d'en-tête, changez l'en-tête avec une balise div et utilisez un identifiant. Par exemple:
Ce n'est pas la meilleure solution mais selon la situation, cela peut être utile.
Bonne chance.
la source
Les balises HTML5 utilisent presque toujours des attributs tels que id, class, etc. Ainsi, le code de remplacement sera:
la source