2013-02-17 40 views
2
Example Text: This will be stored in the $_POST['x'] variable 
This is sentence one. 
This is sentence two. 
This is sentence three. 

如果我运行下面这这个代码将返回的数组只有一个元素mysqli_real_escape_string阻止preg_split工作?

$x= mysqli_real_escape_string($db, $_POST['x']); 
$y= preg_split("/(\r\n|\n|\r)/", $x); 

但是,如果我运行此代码下面它将正确将它分成所有3个元素。

$x = $_POST['x']; 
$y= preg_split("/(\r\n|\n|\r)/", $x); 

有没有其他人经历过这种现象?为什么会发生?编码

+0

你为什么不输出的前/后的$ _ POST [ 'X']和ÿ你可能会明白为什么 – 2013-02-17 21:57:53

回答

4

http://php.net/mysqli-real-escape-string
字符是NUL(ASCII 0),\ N,\ r \,”,”,与控制-Z。

这意味着换行符成为\\n(LF), 。\\r(CR)和\\r\\n(CRLF)因此,他们不再匹配正则表达式

今后,RTM;)

+0

啊,这很有道理。不知何故,我错过了 – jakecraige 2013-02-17 22:00:25

+0

@Constarr通常,转义字符串将是在将值与mysql查询连接起来之前调用的最后一个函数。 – datasage 2013-02-17 22:10:06

+0

是的,我明白了为什么。了解这可能会帮助我避免许多次错误。我很惊讶,我甚至知道现在发生了什么。谢谢! – jakecraige 2013-02-17 22:24:48