2011-09-30 9 views

Répondre

0

Vous pouvez toujours utiliser strip_tags() avec un second paramètre contenant les variables autorisées.

Alternativly, utilisation ...

preg_replace('/<script>(.*)</script>/i', '$1', $input); 

Remarque, non testé.

+0

Je veux seulement remplacer

2

Soit utiliser un simple remplacement:

$string = str_replace(array("<script>","</script>"), ""); 

ou RegEx:

$string = preg_replace("/<script.*?>(.*)?<\/script>/im","$1",$string); 
2
echo strip_tags($text, '<p><strong><a>'); 

état juste ceux que vous ne voulez pas enlevé dans la deuxième param

+0

Ne résout pas le problème. Permet de supprimer le noeud à l'intérieur des tags. L'exemple montre dépouiller les étiquettes, mais pas le contenu. – Samvel

+0

-1 Ne répond pas du tout à la question. Tout d'abord, OP a déclaré: "Je ne veux pas utiliser stip_tags" '. Deuxièmement, que se passe-t-il si cela supprime les balises pour un fichier html entier? Il est totalement déraisonnable de s'attendre à ce qu'une liste complète de toutes les balises html possibles existe. – Birrel

1

Je suppose que vous voulez prévenir les attaques XSS, vous ne devriez pas simplement s'inquiéter de script étiquettes, quelqu'un pourrait exploiter comme ceci: <a href="http://anywhere.com" onClick="alert(1);">test</a> (c'est un très de façon simple si).

Si vous ne voulez que l'étiquette script, sans attribut, à filtrer:

str_replace(array('<script>', '</script>'), array('', ''), $str); 

Vous devriez améliorer cela en utilisant Regex; En utilisant preg_match'es et preg_replaces (ou seulement preg_replaces), vous pouvez faire correspondre et/ou remplacer la balise de script par ses attributs. Ou même avoir plus de protection contre XSS.

Éditer: ou même une expression régulière comme /<script>(.+)<\/script>/ puis stocker ce qui entre les parenthèses dans une variable puis l'imprimer.

+0

pas vraiment travailler de cette façon! utilisez regex! – B4NZ41

0

Essayez ce camarade ..

$strn = "<script>alert(1)</script>"; 
$ptrn = "=^<script>(.*)</script>$=i"; 

echo preg_match($ptrn, $strn, $mtchs); // 0 means fail to matche and 1 means matches was found! 
var_dump($mtchs); 

résultats dans

1array(2) { 
    [0]=> string(25) "" 
    [1]=> string(8) "alert(1)" 
} 
0

Un moyen facile est d'utiliser StripTags.

aller à StripTags github et télécharger ou installer via composer. cette classe a une méthode appelée only qui le fait pour vous!

use Mimrahe\StripTags\Stripper; 
$stripper = new Stripper(); 
$stripper->text('<a href="#">link</a><p>some paragraph</a>'); 
$stripper->only(['p']); 
echo $stripper->strip(); // prints '<a href="#">link</a>some paragraph' 
Questions connexes