Codeigniter表单验证会破坏json值

时间:2014-01-22 11:19:06

标签: php json codeigniter

嘿我在帖子上提交一个数组,其中每个值都是一个json字符串,如下所示:

Array
(

    [destinations] => Array
        (
            [0] => {"selected_value":185,"destinations":38709,"type":"cl","name":"name1"}
            [1] => {"selected_value":395,"destinations":28867,"type":"cl","name":"name2"}
        )

)

现在解码时:

    foreach($destinations as $json){
            $row = json_decode($json,true);
   ...
  }

它工作正常,但是如果我尝试在目的地上运行表单验证:

$this->form_validation->set_rules('destinations', 'Destinations', 'required');

我不能再json_decode价值了,看起来很难,如果我回应它,​​我可以看到:

{"selected_value":395,"destinations":28867,"type":"cl","name":"name2"}

但解码不起​​作用且$row为空。

运行json_last_error给出:4 和$json的var_dump给出:

string(143)
 "{"selected_value":185,"destinations":38709,"type":"cl","name":"07h00 תקינים"}" 

注意:名称值是希伯来语,我举了一个英文示例,以便于阅读。

我尝试通过创建自定义回调函数来解决它,因为我认为所需的实现是问题,但我得到了相同的结果。 有谁知道这个bug或/和它如何修复? 我知道我可以检查它是否规则,但我宁愿使用CI的表单验证。 我正在使用codeigniter 2.1.3,没有升级选项。

2 个答案:

答案 0 :(得分:0)

尝试执行json_last_error函数http://www.php.net/manual/en/function.json-last-error.php。它可以帮助您发现错误是什么。还可以尝试对变量执行var_dump并将其发布到此处。

答案 1 :(得分:0)

问题是表单验证仅适用于未找到的帖子数据。你可以像这样做

$row = json_decode($json,true);

$_POST['destinations'] = $row['destinations'];

现在

$this->form_validation->set_rules('destinations', 'Destinations', 'required');

这应该有用。