jQuery(几乎)相当于 PHP 的 strip_tags()

IT技术 javascript jquery html strip-tags
2021-02-13 19:14:46

是否有此功能的 jQuery 版本?

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

从字符串中去除所有标签和其中的内容,除了在允许的标签字符串中定义的标签。

喜欢:

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

从:

<div id="text">
  <p> paragraph </p>
  <div> should be stripped </div>
</div>
6个回答

删除标签,而不是内容,这是 PHP 的strip_tags()行为方式,您可以执行以下操作:

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);
});

在这里尝试一下。

什么<script>标签?这些未列入白名单,但仍存在于输出中。
2021-03-23 19:14:46
如何在 textareas 上进行这项工作?例如,如果我按下一个按钮,那么 textarea 内的所有 html 标签都应该被条纹化。
2021-03-30 19:14:46
我试过 $("*").each()... 似乎工作正常。除非我错过了什么。
2021-04-01 19:14:46
很不错的一款。谢谢 !
2021-04-03 19:14:46

要删除您可以使用的所有标签

$('<div>Content</div>').text()
.text()更等同于PHPhtmlspecialchars()strip_tags()示例:outside html - <strong>inside html</strong> strip_tagswill be outside html - inside htmlbut .text()will be outside html - <strong>inside html</strong>where <is &lt;and >is&gt;
2021-03-15 19:14:46
$('dsfsadfasdfasdfasdf<a>sdfsdf</a>').text()会让你"sdfsdf"失去文本的第一部分。
2021-03-28 19:14:46
也是 $('<p>'+content+'</p>').text();
2021-04-01 19:14:46
XSS 警告:此方法也将解码实体,例如Foo &lt;script&gt;alert('XSS')&lt;/script&gt; <span>Bar</span>将变成Foo <script>alert('XSS')</script> Bar. PHPstrip_tags不会这样做。
2021-04-06 19:14:46
是的,只有当文本包含在某个 html 标签中时才有效
2021-04-10 19:14:46

只需使用正则表达式:

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

完毕。:)

对于p标签:

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

对于其他标签,它变得更加复杂。

换行符会中断这个 rx:'<tag\n>'.replace(/<.*?>/g,'') // <tag\n>以克服这种使用[\s\S]而不是点:/<[\s\S]*?>/g
2021-03-19 19:14:46
...或者 /<[^>]*>/g
2021-03-27 19:14:46

这对我有用:

function strip_tags(str) {
    str = str.toString();
    return str.replace(/<\/?[^>]+>/gi, '');
}
投票给那个,因为它是唯一可以在没有副作用的情况下工作的答案。如果可以的话,我会减半点,因为这个功能不允许标签白名单(我不需要)。
2021-03-24 19:14:46

不是一个实际的答案,而是一个警告(取决于你想用这个做什么):

恕我直言,在几乎所有情况下,都应该在服务器端进行输入清理(在这种情况下,使用本机 PHP 函数)。如果您打算用客户端功能替换PHP 功能,我强烈建议您不要这样做。

为什么?

仅仅因为您正在创作一个网站,并不意味着:

  1. 您的用户启用了 JavaScript。如果您没有严格通过脚本提交表单(使用提交按钮等),它仍然允许用户提交无效数据(例如 <script> 标签等)
  2. 请求实际上可能根本不是由浏览器发起的,从而绕过了任何基于 JS 的输入清理。

同样,不是真正回答您的问题,而是根据您的问题可能会走向何方的警告:)

@mikeschinkel:在事实发生两年后,并不是每天都有人被否决:)
2021-03-15 19:14:46
@Alex - 看看我的回答中链接的例子。我特意为p标签着色以强调“白名单”保持不变。保留所有文本。
2021-04-02 19:14:46
投反对票是因为“答案”不是答案,并假设 OP 无知并且不知道他们需要什么。最好先了解为什么有人会在基于假设的用例反对某事之前提出要求。
2021-04-03 19:14:46
不,我试图让访问者在评论时“引用”评论。当他们点击引用按钮时,我希望他们引用的评论中的文本出现在 textarea 中,没有标签,因为这可能会吓到他们
2021-04-12 19:14:46
@Alex - 我想你是想接受 karim79 的回答,而不是我的 :)
2021-04-13 19:14:46