Parce que cette question est étiquetée avec regex Je vais répondre par la solution du pauvre dans cette situation :
$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);
Cependant, les expressions régulières ne servent pas à analyser le HTML/XML, même si vous écrivez la commande parfait expression qui finira par casser, cela ne vaut pas la peine, bien que, dans certains cas, il soit utile de corriger rapidement un balisage, et comme c'est le cas avec les corrections rapides, oubliez sécurité . N'utilisez les regex que sur le contenu/marquage auquel vous faites confiance.
Rappelez-vous, tout ce que l'utilisateur saisit doit être considéré pas sûr .
Meilleur La solution ici serait d'utiliser DOMDocument
qui est conçu pour cela. Voici un extrait qui montre à quel point il est facile, propre (par rapport aux expressions rationnelles), (presque) fiable et (presque) sûr de faire la même chose :
<?php
$html = <<<HTML
...
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$script = $dom->getElementsByTagName('script');
$remove = [];
foreach($script as $item)
{
$remove[] = $item;
}
foreach ($remove as $item)
{
$item->parentNode->removeChild($item);
}
$html = $dom->saveHTML();
J'ai supprimé le HTML intentionnellement car même celui-ci peut bork .
3 votes
N'oubliez pas que les balises script ne sont pas les seules parties vulnérables du HTML.
0 votes
Oui, je sais qu'il y a d'autres parties vulnérables aussi, mais j'ai juste besoin d'enlever les balises script.
3 votes
Lire este . Il vous aidera à
4 votes
Jose, non. Lis ça. stackoverflow.com/questions/1732348/ pas de regex pour l'analyse du html
0 votes
Cette question a déjà été posée à plusieurs reprises, par exemple. aquí o aquí mais attention à que .
1 votes
@Rikudo Eh bien... s'il a besoin d'utiliser regexp pour supprimer les balises html... il doit y avoir une raison. Merci pour ce lien !
0 votes
Jose, la raison est que je ne suis pas familier avec d'autres outils plus performants. C'est exactement la même raison pour laquelle les gens utilisent toujours
mysql_*
fonctions en php.0 votes
@Rikudo Sennin -- ou PHP du tout :)
0 votes
@Malvolio nahhh, c'est aller un peu trop loin maintenant :P
0 votes
@Rikudo L'utilisation de regex pour le parsing html a ses propres avantages et inconvénients. Son utilité dépend d'une situation particulière. Ne soyez pas si fanatique. Le monde est beaucoup plus complexe et la même règle ne peut pas être utilisée à toutes fins. Oui, dans de nombreux cas, regex n'est pas le meilleur outil pour l'analyse HTML, mais cela ne veut rien dire.
0 votes
Cependant, dans la plupart des cas, il est très inefficace et peu sûr d'utiliser une regex. Il est très problématique d'utiliser un analyseur syntaxique qui ne comprend pas la langue qu'il analyse. C'est pourquoi il existe spécifique Analyseurs HTML et XML.
0 votes
@Rikudo Vous essayez d'utiliser une seule règle pour tout :) Plus tard, vous verrez que tout n'est pas si simple.
0 votes
En ce qui concerne le débat entre analyseur html et regex - vous avez probablement besoin des deux ; sachez qu'un analyseur html ne reconnaîtra pas les commentaires conditionnels, ce qui signifie qu'IE rendra volontiers les balises script à l'intérieur. Le problème général pour résoudre ce problème de manière élégante est que les navigateurs s'en moquent...