Php 序列化数组中的新行
当从HTML表单获取数据并在序列化数组中存储值(如果有新行)时,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:“新行
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;