Har*_*jan 0 php serialization json codeigniter
我有一个视图$all_set上的数组,其中包含一些ids.now我想在控制器中使用表单submit.for传递此数组,我使用j子编码和解码.
在我看来:
<?php $all_set=json_encode($all_set); ?>
<input type="hidden" name="all_set" value="<?php echo serialize($all_set); ?>">
Run Code Online (Sandbox Code Playgroud)
上面的值包含(正如我在页面源中看到的):
<input type="hidden" name="all_set" value="s:26:"{"0":"1","5":"2","13":"3"}";">
Run Code Online (Sandbox Code Playgroud)
现在在控制器上:
$result=$this->input->post('all_set');
$result= unserialize($result);
$result=json_decode($result);
print_r($result); die;
Run Code Online (Sandbox Code Playgroud)
这给了我错误,我没有在控制器上获得任何数组.错误:
Message: unserialize() [function.unserialize]: Error at offset 0 of 5 bytes
Run Code Online (Sandbox Code Playgroud)
为什么会这样?请帮忙.
您必须添加htmlspecialchars()到序列化.
<input type="hidden" name="all_set" value="<?php echo htmlspecialchars(serialize($all_set)); ?>">
Run Code Online (Sandbox Code Playgroud)
编辑
为什么这样才能解决问题?让我们先看看OP的报价输出:
value="s:26:"{"0":"1","5":"2","13":"3"}";">
^ ^
Run Code Online (Sandbox Code Playgroud)
我添加^了标记问题源 - 您的值包含引号,这使浏览器看到此输入更像这样:
value="s:26:" {"0" "1" , "5" : "2","13":"3"}";">
Run Code Online (Sandbox Code Playgroud)
一旦找到匹配,它就会关闭它".还有就是在HTML特殊字符,其中包括<,>,&,"其中有若预计将literaly通过转换为实体.所以通过调用htmlspecialchars()我们转换所有这些字符,标记将如下所示:
value="s:26:"{"0":"1","5".....
Run Code Online (Sandbox Code Playgroud)
浏览器现在正确解释它,正确显示并正确发回,但不将其视为标记的一部分.
编辑2
事实上,反序列化在你的代码中非常有用.摆脱serialize()/ unserialize()完全 - 你的json编码数据只是纯字符串,所以你只需要htmlspecialchars().
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |