PHP str_replace双引号难度

时间:2012-04-16 20:28:31

标签: php quotes str-replace

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

我的代码是:

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

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

你可以帮我解决这个问题吗?

*我正在使用POST进行表单,除了解析之外,我没有使用输入。

由于

这就是我要做的一切

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

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

3 个答案:

答案 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);