Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter表单验证会破坏json值_Php_Json_Codeigniter - Fatal编程技术网

Php Codeigniter表单验证会破坏json值

Php Codeigniter表单验证会破坏json值,php,json,codeigniter,Php,Json,Codeigniter,嘿,我在post上提交了一个数组,其中每个值都是一个json字符串,如下所示: Array ( [destinations] => Array ( [0] => {"selected_value":185,"destinations":38709,"type":"cl","name":"name1"} [1] => {"selected_value":395,"destinations":28867,"t

嘿,我在post上提交了一个数组,其中每个值都是一个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\u解码,这似乎很好,如果我回显它,我可以看到:

{"selected_value":395,"destinations":28867,"type":"cl","name":"name2"}
但是解码不起作用,
$row
为空

运行
json\u last\u error
给出:4
$json
的var_dump提供:

string(143)
 "{"selected_value":185,"destinations":38709,"type":"cl","name":"07h00 תקינים"}" 
注意:名称值是希伯来语,我举了一个英语示例,这样更容易阅读

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

尝试执行json_last_error函数。它可以帮助您发现错误所在。还可以尝试对变量执行var_转储,并将其发布到此处。

问题在于表单验证仅应用于未找到的post数据。你可以这样做

$row = json_decode($json,true);

$_POST['destinations'] = $row['destinations'];
现在呢

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

这应该行。

这应该是一条注释,我已经写过了,“但是解码不起作用,$row为null。”在$row=json\u decode($json,true)之后运行json\u last\u error函数;行将帮助您发现错误。您有一个格式错误的json等价于此常量json_error_语法。请尝试在foreach循环内的$json变量上执行var_转储,并将其发布到此处。现在我知道了原因。json_解码仅适用于UTF-8编码字符串。您的字符串是UTF-16编码的,如json的name属性所示。表单验证在我尝试解码它之前运行,只有在找到数据时才进行解码$json是$_POST['destinations']中的一个元素,我无法理解您的解决方案……您应该看到@HashemQolami的答案。另外,您的问题很模糊,是从内部获得的
目的地
,jsonI没有看到@HashemQolami的答案,我的问题是一个简化,数组$destinations是$_POST['destinations')…他删除了答案。在表单验证规则中使用数组
$this->form_validation->set_rules('destinations[]','destinations','required')我已经更改了它,仍然是相同的结果。