删除单引号后跟双引号

时间:2012-09-07 09:28:29

标签: php xss

使用PHP,我必须检测'“(单引号后跟双引号)以防止XSS。 因此,我实现了以下功能。

function xss_cleaner_new($input_str){
    $return_str = preg_replace('/"\'/','&l', &input_str);
    return $return_str;
}

然而,它似乎只检测(第一个单引号)而不是(单引号后跟双引号)

如何成功检测到“”(单引号后跟双引号)?

2 个答案:

答案 0 :(得分:1)

试试这个:

preg_replace("/'\"/","&l",$input_str);

答案 1 :(得分:0)

想一想。你想说的是匹配单个引号后跟双引号。但只需检查一下你的正则表达式并仔细思考。

你有一个非插值的PHP字符串文字'/"\'/'被输入你的函数调用,其中包含一个转义的撇号。字符串文字的值是/"'/,所以现在它是/ - 描述的正则表达式。带走/因为我们已经说过它是一个正则表达式,你得到"',或者双引号后跟一个单引号,与你的完全相反想。以另一种方式工作,我们可以翻转它们('"),用/描绘它以表示它的regexhood(/'"/),然后用撇号引用它并逃脱其中包含的撇号所以字符串文字没有提前结束('/\'"/'),而你回到了你开始的地方,只有你没有错误。