【问题标题】:Codeigniter form validation breaks json valueCodeigniter 表单验证会破坏 json 值
【发布时间】:2014-01-22 11:19:05
【问题描述】:

嘿,我在帖子上提交了一个数组,其中每个值都是一个 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 תקינים"}" 

注意:名称值是希伯来语,我用英文给出了一个例子,这样更容易阅读。

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

【问题讨论】:

    标签: php json codeigniter


    【解决方案1】:

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

    【讨论】:

    • 这应该是一个注释,我已经写了,“但是解码不起作用,$row 为空。”
    • 在 $row = json_decode($json,true); 之后运行 json_last_error 函数行将帮助您发现错误。
    • 你有一个格式错误的 json 等价于这个常量 JSON_ERROR_SYNTAX。
    • 尝试在 foreach 循环内的 $json 变量上执行 var_dump 并将其发布到此处。
    • 现在我知道原因了。 json_decode 仅适用于 UTF-8 编码的字符串。我认为您的字符串是 UTF-16 编码的,如 json 的 name 属性所示。
    【解决方案2】:

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

    $row = json_decode($json,true);
    
    $_POST['destinations'] = $row['destinations'];
    

    现在

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

    这应该可行。

    【讨论】:

    • 表单验证在我尝试解码之前运行,只有在找到数据时才会进行解码。 $json 是 $_POST['destinations'] 中的一个元素,我无法理解您的解决方案...
    • 您应该看到@HashemQolami 的答案。你的问题也很模糊,是从 json 内部得到destinations
    • 我没有看到 @HashemQolami 没有答案,我的问题是一个简化,数组 $destinations 是 $_POST['destinations']...
    • 他已经删除了答案。在表单验证规则中使用数组$this->form_validation->set_rules('destinations[]', 'Destinations', 'required');Docs
    • 我改了,还是一样的结果。
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多