我正在尝试清理用户可以在表单中输入的文本。我将不胜感激任何更快的方法和额外的预防措施,以确保不通过此表单注入错误的代码。但我删除双引号时遇到了特别的麻烦。
我的代码是:
str_replace(array('<','>',')','\$','(', '?', '.', ',' ,'!', '-', '+', '/', '\*', '\\', '"'), " ", $text)
但是它不会匹配并删除倾斜的引号,例如从MS word,“to”这是正常的双引号。
你可以帮我解决这个问题吗?
*我正在使用POST进行表单,除了解析之外,我没有使用输入。
由于
这就是我要做的一切
str_replace(array('"'), " ", $text)
用空格替换双引号,但PHP无法识别来自Microsoft Word等程序的双引号。感谢
答案 0 :(得分:4)
使用此功能可以删除MS智能引号。
function convert_smart_quotes($string)
{
$search = array(chr(145),
chr(146),
chr(147),
chr(148),
chr(151));
$replace = array("'",
"'",
'"',
'"',
'-');
return str_replace($search, $replace, $string);
}
或者将它们添加到您的代码中:
str_replace(array('<','>',')','\$','(', '?', '.', ',' ,'!', '-', '+', '/', '\*', '\\', '"', chr(145), chr(146), chr(147), chr(148)), " ", $text)
http://shiflett.org/blog/2005/oct/convert-smart-quotes-with-php
答案 1 :(得分:1)
你想做什么?
有htmlspecialchars()函数可以保护所有未知输出不会破坏HTML。
答案 2 :(得分:1)
您可以将字符列入白名单,而不是仅将其列入黑名单。然后用空格替换未列入白名单的任何字符,然后将多个空格标准化为一个空格。
$filtered = preg_replace(array('~\W~', '~[ ]{2, }~'), ' ', $text);