Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery(几乎)相当于PHP';s strip_标签()_Javascript_Jquery_Html_Strip Tags - Fatal编程技术网

Javascript jQuery(几乎)相当于PHP';s strip_标签()

Javascript jQuery(几乎)相当于PHP';s strip_标签(),javascript,jquery,html,strip-tags,Javascript,Jquery,Html,Strip Tags,这个函数有jQuery版本吗 string带标签(string$str[,, 字符串($U标记]) 从字符串中除去所有标记及其内部内容,但在允许的标记字符串中定义的标记除外 比如: 发件人: 段落 应该剥离 要删除标签,而不是内容,这就是PHP的strip_tags()的行为方式,您可以执行以下操作: var whitelist = "p"; // for more tags use the multiple selector, e.g. "p, img" $("#text *").not(w

这个函数有jQuery版本吗

string带标签(string$str[,, 字符串($U标记])

从字符串中除去所有标记及其内部内容,但在允许的标记字符串中定义的标记除外

比如:

发件人:


段落

应该剥离
要删除标签,而不是内容,这就是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);
});

更新 在保留内容的同时,使用以下命令剥离标记

$('#text').find('p').contents().unwrap();
这将剥离
p
标记,其中
p
是“#text”的子元素


检查处的工作示例,不是实际答案,而是一句警告(取决于您试图如何处理此问题):

总之,在几乎所有的情况下,输入清理都应该在服务器端完成(在本例中,使用本机PHP函数)。如果您打算用客户端功能取代PHP功能,我强烈建议您不要这样做

为什么?

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

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

  • 同样,不是真的回答你的问题,而是基于你的问题可能会去哪里的警告:)

    删除所有你可以使用的标签

    $('<div>Content</div>').text()
    
    $('Content').text()
    
    您可以尝试这个可能是最好的解决方案:

    只需使用正则表达式:

    html.replace( /<.*?>/g, '' );
    
    对于其他标签,它变得更加复杂。

    这对我来说很有用:

    function strip_tags(str) {
        str = str.toString();
        return str.replace(/<\/?[^>]+>/gi, '');
    }
    
    功能条标签(str){
    str=str.toString();
    返回str.replace(/]+>/gi',);
    }
    
    要删除所有标签,可以使用:

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

    代码来源:

    即使这是一个旧线程,我认为对于那些仍在寻找答案的人来说,它可能会很有用

    这似乎是最好的解决方案:

    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 : ''
          })
    }
    
    返回6:
    '1
    1'

    例7:

    strip_tags('1 <br/> 1', '<br><br/>')
    
    strip_标签('1
    1','

    '))


    返回7:
    '1
    1'

    提供了此函数的端口。
    剥离标签
    。剥离标签时,是否希望其子元素也被删除?你能澄清一下吗?(因此,请在你的问题中明确说明你是想要
    strip\u tags
    的行为,还是你认为它有的行为。:D)你认为我认为它有的行为:D是的,我希望内容被剥离到(包括儿童,如果有的话)那不是
    strip\u tags
    所做的。OP说剥离标签内部的内容被删除了,但是。@Hussein:事实上,无论是他的文本还是他的示例都没有明确说明这两种方式(他只是错误地描述了
    strip_标签的作用)。我们唯一能做的就是,他想要一个包含
    strip\u标签的端口,它的行为不像你的Javascript那样。它是一个she。这就是我从她的问题中所理解的,不管她是否正确引用了
    strip_tags
    。@侯赛因:很公平。不管怎样,这都是一场赌博:让我们拭目以待@亚历克斯:对不起;我没有检查你的性别。反射分型:)不,我只是想让访客当他们评论时,“引用”评论。当他们点击quote按钮时,我希望他们引用的评论中的文本出现在textarea中,没有标签,因为它可能会吓人them@Alex-看一下我答案中链接的示例。我特意给
    p
    标签上色,以强调“白名单”保持不变。所有文本都被保留。@Alex-我想你是想接受karim79的答案,而不是我的:)被否决,因为“答案”不是答案,并且假设OP无知,不知道他们需要什么。最好能理解为什么有人在基于假设的用例进行反对之前会提出一些问题。@mikeschinkel:事实发生两年后,并不是每天都有人被否决:)我试过$(“*”)。each()。。。这似乎很有效。除非我漏掉了什么。如何在文本区工作?e、 如果我按下一个按钮,那么文本区域内的所有html标记都应该是条带化的。那么
    标记呢?这些不是白名单,但仍然存在于输出中。非常好的一个。谢谢大家!
    $('dsfsadfasdfasdfasdffsdf')。text()
    将为您提供
    “sdfsdf”
    ,从而丢失文本的第一部分。是的,只有当文本包装在某些html标记中时,它才会起作用。do
    $(''+content+'

    ')。text()
    .text()
    strip\u tags()
    更等同于PHP
    htmlspecialchars()
    。示例:
    外部html-内部html
    条带标签将是
    外部html-内部html
    但是
    .text()
    将是
    外部html-内部html
    其中
    是代码/代码,而
    警告:此方法还将解码实体,例如,
    Foo-scriptalert('XSS')/脚本栏
    将变成
    Foo-alert('XSS')栏
    。PHP的
    strip_标签
    并不能做到这一点。投票支持这一点,因为这是唯一一个没有副作用的答案。如果可以的话,我会删掉一半,因为这个函数不允许标记白名单(我不需要)。不需要括号
    str.replace(/]+>/ig,“”)
    就可以了。sameline breaks打破这个rx:
    '.replace(//g',)//
    来克服这种用法
    [\s\s]
    而不是dot:
    /g
    ..或
    /]*>/g
    var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");
    
    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 : ''
          })
    }
    
    strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>')
    
    strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>')
    
    strip_tags("<a href='http://kvz.io'>Kevin van Zonneveld</a>", "<a>")
    
    strip_tags('1 < 5 5 > 1')
    
    strip_tags('1 <br/> 1')
    
    strip_tags('1 <br/> 1', '<br>')
    
    strip_tags('1 <br/> 1', '<br><br/>')