1

我正在尝试清理用户可以在表单中输入的文本。我将不胜感激任何更快的方法和额外的预防措施,以确保不会通过此表单注入错误代码。但是我在删除双引号时遇到了特别的麻烦。

我的代码是:

str_replace(array('<','>',')','\$','(', '?', '.', ',' ,'!', '-', '+', '/', '\*', '\\', '"'), " ", $text)

但它不会匹配并删除倾斜的引号,例如从 MS 单词“到”,这是正常的双引号。

你能帮我解决这个问题吗?

*我将 POST 用于表单,并且除了解析它之外,我没有将输入用于任何其他用途。

谢谢

这就是我想要做的一切

str_replace(array('"'), " ", $text)

用空格替换双引号,但 PHP 无法识别来自 Microsoft Word 等程序的双引号。谢谢

4

3 回答 3

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

于 2012-04-16T20:34:57.043 回答
1

你想做什么?

htmlspecialchars()函数可以保护所有未知输出不破坏 HTML。

于 2012-04-16T20:30:40.840 回答
1

您可以将字符列入白名单,而不是将某些字符列入黑名单。然后用空格替换任何未列入白名单的字符,然后将多个空格规范化为一个空格。

$filtered = preg_replace(array('~\W~', '~[ ]{2, }~'), ' ', $text);
于 2012-04-16T20:40:58.107 回答