字符串數組轉化成json格式


本來這個問題應該很簡單的,直接用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('&amp;', '&quot;', '&lt;', '&gt;'), $string));
    }
    return $string;
}

我的字符串是$data="{&quot;age&quot;:&quot;19&quot;,&quot;name&quot;:&quot;MIle&quot;,&quot;sex&quot;:&quot;male&quot;}"

我用這個函數轉了之后得到的數據是{"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("&quot;", '"', $data);替換了一下,就成功了。

 

另外附上json_last_error()函數說明的鏈接http://www.php.net.cn/help/json/json_last_error/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM