用于检查字符串是否为mysql反斜杠的函数

时间:2010-01-14 16:28:09

标签: php mysql regex escaping

由于在将字符串输入数据库之前没有检查字符串是否被转义的函数,如何使用正则表达式执行此操作?

$string = 'some" string';
if(!preg_match('//',$string))
{
   $string = mysqli_real_escape_string($string);
}

php手册:

  

mysqli_real_escape_string反斜杠字符编码为NUL(ASCII 0),\ n,\ r,\,',“和Control-Z。

3 个答案:

答案 0 :(得分:4)

没有函数来检查字符串是否被转义,因为没有逻辑方法来判断字符串是否被转义。

It\'s nice

逃脱了吗?你怎么知道的?它是一个逃脱的撇号,还是一个未经撤销的反斜杠和撇号?

转义是一个进程,而不是字符串的属性。您必须始终知道您是否已转义特定上下文的字符串。最好的方法是保持你的字符串原始和未转义,直到他们离开另一个上下文。因此,在实际连接到SQL字符串之前,请不要调用mysql_real_escape_string。在您回复HTML输出之前,请不要致电htmlspecialchars

答案 1 :(得分:4)

不要试图这样做。

如果你想方设法确定一个字符串是否被转义,有人可以进来制作一个会欺骗你的检测方法的字符串。

例如,如果您使用“\”作为测试来确保斜杠被转义,我可以给您一个像"'; DROP DATABASE dbname(); --\\"这样的字符串,它会通过您的检查,但仍然非常错误。

如果由于某种原因无法使用存储过程和/或正确的参数处理,那么确保字符串清洁的唯一方法是清除每个不受信任源的每个字符串。

答案 2 :(得分:2)

你没有。 使用预准备语句和绑定变量。请参阅mysqli_preparemysqli_stmt_bind_param