我应该如何在单引号中添加斜线并忽略双引号?

时间:2010-05-02 18:02:01

标签: php mysql escaping

我应该如何在单引号中添加斜线并忽略双引号? 我正在使用PHP。我只想逃避单引号以防止我的php mysql查询中断。

谢谢!

编辑: 我认为正则表达式搜索和替换将是最有帮助的。

5 个答案:

答案 0 :(得分:13)

好的,这个帖子真的很晚,但是添加了这个答案,希望它可以帮助有人登陆这个问题。虽然@Weston C已经提供了一个正则表达式解决方案,但是有一个用于执行此操作的php函数 - addcslashes(http://php.net/manual/en/function.addcslashes.php):

string addcslashes ( string $str , string $charlist )
Returns a string with backslashes before characters that are listed in charlist parameter.

答案 1 :(得分:4)

使用mysql_real_escape_string。关于MySQL连接的字符编码,它只会逃避所需的字符。

答案 2 :(得分:4)

一个简单的str_replace("'", "\\'", $string)应该有效。但正如Gumbo所述,如果你试图逃避MySQL查询,你应该使用库函数。

答案 3 :(得分:2)

好吧,preg_replace_all("/([^\])'/","$1\'",$yourStrHere)会做你所要求的:

  • “/([^ \])'/”产生正则表达式/([^ \])'/,表示“匹配任何不是反斜杠后跟单引号的单个字符,并在之前捕获字符引用。“
  • “$ 1 \”表示“替换为捕获的字符后跟反斜杠和单引号”

但是...

比尔关于使用mysqli或PDO API进行参数化查询的答案确实是非常好的建议。让你的数据库API处理这个比自己做更容易和更有效 - 编写这些API的人(以及那些为这些API工作的本地后端的人)可能花费更多的时间和精力来解决安全问题。性能问题比我们大多数人都希望自己花光。

答案 4 :(得分:1)

如果对动态值使用查询参数,则根本不需要进行任何转义。

您可以在mysqli扩展程序或PDO扩展程序中使用查询参数(我更喜欢PDO)。旧的mysql扩展不支持查询参数。