参数问题关于函数参数($ 0,$ 1); + jquery,js?

时间:2011-07-16 07:10:53

标签: javascript jquery function arguments

怀疑功能($ 0,$ 1);  // $ 0,$ 1两个参数 我的问题是这两个论点都没有定义但是它上面有一些数据???

可以任何帮助理解 这两个论点如何运行;

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

2 个答案:

答案 0 :(得分:1)

这是清理标记的一种非常糟糕的方法。它几乎可以保证有一些漏洞。一种更简单的方法就是剥离所有标记:

var stripTags = function(str) {
  return str.replace(/<[^>]+>/g, '');
};

只要允许特定元素,最好编写一个标记化器,遍历标记,删除不允许的所有内容,然后从这些标记输出标记。

但是如果你不打算写一个标记器,这将是一个更好的方法,即使它仍然是粗糙的:

var allowed = { p: true, a: true };
var sanitize = function(str) {
  return str.replace(/<\s*\/?\s*([^\s>]+)[^>]*>/g, function(tag, name) {
    if (!allowed[name.toLowerCase()]) {
      return '';
    }
    return tag;
  });
};

但正如上面的评论所提到的,如果您只是在客户端清理用户的标记,那么这是一个主要问题。您需要在服务器端进行清理。

答案 1 :(得分:0)

return input.replace(commentsAndPhpTags, '').replace(tags, function (input, group1) {
    //console.log('----------->'+group1);
    return allowed.indexOf('<' + group1.toLowerCase() + '>') > -1 ? input : '';
});

你的正则表达式/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi只包含一个组匹配,它将是括号([a-z][a-z0-9]*)内的内容,replace()将传递给你的函数原始字符串并且组匹配。

然而,您的正则表达式应该与此/(<\/?[a-z][a-z0-9]*\b[^>]*>)/gi类似,以便能够剥离标记。