Php 序列化数组中的新行

Php 序列化数组中的新行,php,Php,当从HTML表单获取数据并在序列化数组中存储值(如果有新行)时,mysql\u real\u escape\u string的序列化错误 例如,这会输出一个长度错误的字符串,加上新行已被删除 $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:“新行

当从HTML表单获取数据并在序列化数组中存储值(如果有新行)时,
mysql\u real\u escape\u string
的序列化错误

例如,这会输出一个长度错误的字符串,加上新行已被删除

$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:“新行”}

mysql\u real\u escape\u string
返回转义值。。您不使用返回的值,那么您为什么要抱怨它呢


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

如果您在浏览器中查看此代码,换行符将被删除。查看页面源代码,或将其包装在
标记中:

echo "<pre>$array</pre>";
$encodedValue=base64_encode($value);

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

$array=serialize($array);

echo $array;
echo“$array”;

作为建议,您可以在序列化之前在base 64中对HTML表单的序列化结果进行编码,以避免错误并使其安全

要解码存储的值,只需执行相反的过程


HMTL表单值保持不变。通过在base 64中编码的方式,可以安全地将值存储在BD中,但要大33%。

长度错误<代码>“新建\r\n行”有9个字节,长度正确。仅仅因为你看不到新线并不意味着它不在那里。像
“\r”
“\n”
这样的字符通常不明显可见,例如在浏览器中。但实际上,特别是在浏览器中,即使存在多个空格字符,也会转换为空格并规范化为单个空格。改为使用查看源代码。为什么要使用mysql\u real\u escape\u string?好吧,由于某种原因,当它像这样$value=mysql\u real\u escape\u string($value)时,它是突出的;这只是一个例子,它将从公共表单进入数据库。
$array=unserialize($array);
$value=base64_decode($array[0]);
echo $value;