本來這個問題應該很簡單的,直接用json_decode()函數來轉換,問題就出在,轉換出來是NULL,我在服務器獲取手機端傳過來的json格式的參數,在傳遞過程中,“被替換成了" ,我在網上找了個替換特殊字符的函數,我把函數貼一下:
轉自http://hi.baidu.com/doujikai/item/e6eae5fd08c2c318a7298842
function dhtmlspecialchars($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = dhtmlspecialchars($val);
}
} else {
$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));
}
return $string;
}
我的字符串是$data="{"age":"19","name":"MIle","sex":"male"}"
我用這個函數轉了之后得到的數據是{"age":"19","name":"MIle","sex":"male"},的確是沒錯,但是發現不能用json_decode(),而我自己定義了一個字符串為{"age":"19","name":"MIle","sex":"male"},就能用json_decode(),一樣一樣的,確不能用,百思不得其解啊,到網上找了一下,這個是解決方案:
轉自http://www.nginx.cn/337.html
php5.2以后自帶json_decode函數,但是對json文本串的格式要求非常嚴格。
很可能使用該函數得到的返回值是NULL
可以使用使用json_last_error()函數獲取到的返回值來幫助我們判斷出問題的原因。
其中如果提示錯誤JSON_ERROR_SYNTAX(Syntax error),表示json串格式錯誤。
可以通過以下幾個方式排錯:
1. json字符串必須以雙引號包含
$output = str_replace("'", '"', $output);
2. json字符串必須是utf8編碼
$output = iconv('gbk', 'utf8', $output);
3.不能有多余的逗號 如:[1,2,]
用正則替換掉,preg_replace('/,\s*([\]}])/m', '$1', $output)
我先用var_dump()函數打印了一下兩個變量,發現字符數不對,用函數轉換了的字符是99個,我自己定義的是39個,我初學,沒仔細看那個轉換函數不明白為什么,所以就不用他的函數,自己用$re1 = str_replace(""", '"', $data);替換了一下,就成功了。
另外附上json_last_error()函數說明的鏈接http://www.php.net.cn/help/json/json_last_error/