Php Codeigniter表单验证会破坏json值
嘿,我在post上提交了一个数组,其中每个值都是一个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
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')代码>我已经更改了它,仍然是相同的结果。