2012-02-22 32 views
1

从HTML表单获取数据并将值存储在序列化数组中时,如果有新行,则序列化出错mysql_real_escape_string序列化数组中的新行PHP

例如该电源输出错误的长度也串加上新线已被删除

$value="new\r\nline"; 

mysql_real_escape_string($value); 


$array=array(); 
$array[0]=$value; 

$array=serialize($array); 

echo $array; 

打印出a:1:{i:0;s:9:"new line";}

+1

错误的长度? ''new \ r \ nline“有9个字节,长度是正确的。仅仅因为你没有看到换行符并不意味着它不存在。像“\ r”或“\ n”这样的字符通常不可见,例如,在你的浏览器中。但相反,特别是在浏览器中,即使存在多个空白字符,它们也会转换为空白并标准化为单个空间。改为使用视图源。 – hakre 2012-02-22 19:20:40

+0

为什么你使用'mysql_real_escape_string'? – Michas 2012-02-22 19:38:59

+0

确定由于某种原因,当它是这样的$ js = mysql_real_escape_string($ value); – user1209203 2012-02-22 19:40:26

回答

1

mysql_real_escape_string返回转义值..你不使用返回的值,那么你为什么抱怨呢?

此外,如果您在浏览器中检查输出,则不会看到换行符。检查生成的来源。

1

如果您正在浏览器中查看此内容,换行符会被删除。查看网页源代码,或者在<pre>标签包装它:

echo "<pre>$array</pre>"; 
0

至于建议,你可以在基地64从HTML形式的序列化的结果编码序列化,以避免错误,并使其更安全了。

$encodedValue=base64_encode($value); 

$array=array(); 
$array[0]=$encodedValue; 

$array=serialize($array); 

echo $array; 

为了解码您选择储值只是做相反的过程

$array=unserialize($array); 
$value=base64_decode($array[0]); 
echo $value; 

而且HMTL表值保持不变。顺便在base 64中进行编码,可以安全地将值存储在BD中,但要大33%。