【发布时间】:2012-10-06 08:47:21
【问题描述】:
我通过 jQuery Ajax 将数据作为 JSON 发布到我的服务器时遇到了一个大问题。 JSLint 表示数据正常,请求的 Content-Type 设置为application/x-www-form-urlencoded; charset=UTF-8。服务器在 PHP 5.2.11 上运行,所以我不能使用 json_last_error()。
我尝试了 url_decode、utf8_decode 和 html_entities_decode,但似乎没有任何效果。
var_dump(json_decode($jdata)); 返回 null,但如果我执行 var_dump($jdata),一切看起来都正常。 $jdata是帖子数据:$jdata = $this->input->post('requestdata');。
这里有一些从 Firebug 抓取的示例帖子数据:
{
"projectnumber": "345",
"projecdescription": "345",
"articles": [
{
"position": 1,
"article_id": 677,
"online_text": "3 Behälter; Band I-III nach indiv. Stückliste, Sprache: DE - Sprache: de"
},
{
"position": 2,
"article_id": 678,
"online_text": "2 Behälter; Band I-III nach indiv. Stückliste, Sprache: ### - Sprache: en"
}
]
}
编辑:
我现在试过了:
$string = $this->input->post('requestdata');
var_dump($string);
$json = preg_replace('/,\s*([\]}])/m', '$1', utf8_encode($string));
$json = json_decode($json);
var_dump($json);
结果是:
string(338) "{"projectnumber": "4444", "projecdescription": "4444", "articles": [{"position":1, "article_id": 676, "online_text": "## #Behälter; Band I-III nach indiv. Stückliste, Sprache: DE - Sprache: de"}, {"position":2, "article_id": 681, "online_text": "### Behälter; Band I-III nach indiv. Stückliste,语言:### - 语言:en"}]}" 空
通过将 JSON 字符串直接粘贴到 PHP 源中它可以工作,但不能从帖子中获取它!
【问题讨论】:
-
您确定服务器端有 UTF8 字符串吗?试试
var_dump(json_decode(utf8_encode($jdata))); -
观看现场演示:codepad.viper-7.com/ZWZf0I
-
去掉utf8_encode就可以了,你的php文件已经是utf8了,所以你是双编码
标签: php jquery json codeigniter