web-dev-qa-db-fra.com

jQuery (presque) équivalent du strip_tags () de PHP

Existe-t-il une version jQuery de cette fonction?

string strip_tags (string $ str [ string $ allowable_tags])

supprime toutes les balises et le contenu qu'ils contiennent d'une chaîne à l'exception de celles définies dans la chaîne de balises autorisées.

comme:

var stripped = strip_tags($('#text').html(), '<p><em><i><b><strong><code>');

de:

<div id="text">
  <p> paragraph </p>
  <div> should be stripped </div>
</div>
31
Alex

Pour supprimer uniquement les balises, et non le contenu, qui est le comportement de strip_tags() de PHP, vous pouvez faire:

var whitelist = "p"; // for more tags use the multiple selector, e.g. "p, img"
$("#text *").not(whitelist).each(function() {
    var content = $(this).contents();
    $(this).replaceWith(content);
});

Essayez ici.

33
karim79

Pour supprimer toutes les balises, vous pouvez utiliser

$('<div>Content</div>').text()
20
timsly

Il suffit d'utiliser une expression régulière:

html.replace( /<.*?>/g, '' );

Terminé. :)

Pour la balise p:

html.replace( /<[^p].*?>/g, '' );

Pour les autres tags, cela devient plus compliqué.

12
redolent

Cela a fonctionné pour moi:

function strip_tags(str) {
    str = str.toString();
    return str.replace(/<\/?[^>]+>/gi, '');
}
5
joan16v

Pas une réponse réelle, mais un mot d'avertissement (selon ce que vous essayez de faire avec cela):

IMHO, dans presque tous cas, la désinfection des entrées doit être effectuée côté serveur (dans ce cas, en utilisant les fonctions natives PHP). Si votre intention est de remplacer PHP la fonctionnalité par la fonctionnalité côté client, je fortement le déconseille.

Pourquoi?

Ce n'est pas parce que vous créez un site Web que:

  1. Vos utilisateurs ont JavaScript activé. Si vous ne soumettez pas votre formulaire strictement par le biais d'un script (à l'aide des boutons de soumission, etc.), il permet toujours aux utilisateurs de soumettre des données non valides (telles que des balises <script>, etc.).
  2. Les requêtes peuvent ne pas être du tout initiées par un navigateur, ce qui contourne toute désinfection des entrées basée sur JS.

Encore une fois, pas vraiment répondre à votre question, mais un mot d'avertissement basé sur l'endroit où vous pourriez être dirigé en fonction de votre question :)

3
Demian Brecht

Pour supprimer toutes les balises, vous pouvez utiliser:

var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");

Code from: Strip HTML Tags in JavaScript

2
Allan Andrade

METTRE À JOUR

Utilisez ce qui suit pour enlever les balises tout en conservant le contenu

$('#text').find('p').contents().unwrap();

Cela supprimera la balise pp est un élément enfant de '#text'. 

Consultez l'exemple de travail sur http://jsfiddle.net/YWCsH/

1
Hussein

Même s'il s'agit d'un vieux fil, je pense que cela pourrait être utile pour ceux qui cherchent encore une réponse.

La fonction Locutus.io semble être la meilleure solution:

function strip_tags (input, allowed) {
      allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
      var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi
      var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
      return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
      })
}

Exemple 1: 

strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>')

renvoie 1: 'Kevin <b>van</b> <i>Zonneveld</i>'

Exemple 2: 

strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>')

renvoie 2: '<p>Kevin van Zonneveld</p>'

Exemple 3: 

strip_tags("<a href='http://kvz.io'>Kevin van Zonneveld</a>", "<a>")

renvoie 3: "<a href='http://kvz.io'>Kevin van Zonneveld</a>"

Exemple 4: 

strip_tags('1 < 5 5 > 1')

renvoie 4: '1 < 5 5 > 1'

Exemple 5: 

strip_tags('1 <br/> 1')

renvoie 5: '1 1'

Exemple 6: 

strip_tags('1 <br/> 1', '<br>')

renvoie 6: '1 <br/> 1'

Exemple 7: 

strip_tags('1 <br/> 1', '<br><br/>')

renvoie 7: '1 <br/> 1'

1
Dario Corbelli

Vous pouvez essayer ceci, probablement la meilleure solution: http://phpjs.org/functions/strip_tags/

1
Oleg Popov