json_decode无法正确反序列化

时间:2016-03-19 14:56:47

标签: php json api rest curl

我已经制作了一个运行良好的RestAPI,在我的脚本(核心文件)的顶部,我已声明:

header('Content-Type: application/json;charset=utf-8');

现在的问题是,当我将json从客户端传递给我的API时。此问题通常与POSTPUT方法有关。只有当我通过curl传递这种类型的json时才会发生这种情况:

curl -i -d '{"test": "èè"}'

你怎么看我有一些重音字母。所以当我调用这个函数时:

$params = json_decode(file_get_contents("php://input"), true);

$params变量返回NULL。相反,如果我的json看起来像这样:

curl -i -d '{"test": "This is a test"}'

所有工作正常,$params变量具有此值:

array(1) {
  ["test"]=>
  string(14) "This is a test"
}

我猜这个特殊字符引起了这个函数的问题..有人有解决方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来确定输入行是否包含重音字符。

<?php

  preg_match("/[À-ÿ].*/", $input_line, $output_array);

  if(sizeof($output_array) > 0){
    echo "$input_line has accented characters";
  }

?>

您还可以查看URL encoding,因为我认为存在问题。