2012-09-26 68 views
1

我的數據庫存儲了一些我必須通過AJAX獲得的文本。這一切進展順利,但只有當它不包含諸如ë或ä的特殊字符時。我發現了一些關於這個話題的文章,它告訴我要改變AJAX請求的字符集,但這些都不適合我。JSON響應中的特殊字符(ë)

當我啓動螢火它說,這對標題:

Antwoordheaders(荷蘭語爲responseHeaders響應)
緩衝控制無店面,無緩存,必重新驗證,後檢查= 0, pre-check = 0
連接關閉
內容長度94
Content-Type text/html;字符集= ISO-8859-15
日期星期三,2012年9月26日9時52分56秒GMT
過期星期四,1981年11月19日八時52分00秒GMT
語用無緩存
服務器Apache的
X-供電-by PleskLin

Verzoekheaders(荷蘭爲requestheaders)
接受的text/html,應用/ XHTML + xml的,應用/ XML; q = 0.9,/; q = 0.8
接受編碼的gzip,放氣
接受語言NL,EN-US; Q = 0.7,連接; Q = 0.3
授權基本c3BvdGlkczp6SkBVajRrcw ==
連接保持
內容類型text/html; charset = ISO-8859-15
Cookie __utma = 196329838.697518114.1346065716.1346065716.1346065716.1; __utmz = 196329838.1346065716.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(無); PHPSESSID = 2h4vu8gu9v8fe5l1t3ad5agp86
DNT 1
主機www.spotids.com
的Referer http://www.spotids.com/private/?p=16
用戶代理的Mozilla/5.0(Windows NT的6.1; WOW64; RV:14.0)壁虎/ 20100101火狐/ 14.0.1

這兩個頭文件都在討論charset = ISO-8859-15,它應該包含像ë這樣的字符,但它對我不起作用。

我用這個(PHP)代碼:

`$newresult = mysql_query($query2);  
    $result = array(); 
    while($row = mysql_fetch_array($newresult)) 
    { 
     array_push($result, $row); 
    } 
    $jsonText = json_encode($result); 
    echo $jsonText;`
+0

通過的標準,你應該在UTF-8提供JSON數據,最有可能的。 ISO-8859-15可能包含你需要的字符,但是你的JSON格式是什麼?可能不會,因爲它被直接從MySQL中取出。任何人都會猜測MySQL如何存儲和傳遞文本給你,這就是爲什麼最好是強制所有使用UTF-8的原因。 –

回答

6
  1. 確保您設置的標頭爲UTF-8:

    header('Content-Type: application/json; charset=utf-8'); 
    
  2. 確保您的數據庫連接在任何查詢之前用UTF-8編碼製作:

    $query = mysql_query("SET NAMES 'UTF8'"); 
    
  3. 據我所知,JSON對任何不能用純ASCII表示的字符進行編碼。你應該解碼該響應的JSON。

  4. 嘗試轉移到PDO,因爲mysql_*函數已被棄用。使用這個漂亮的tutorial

+0

第二步拯救了我的一天!日Thnx! – Jovano

+0

第2步爲我工作。 :) 謝謝 –

0

驗證Content-Type的肉

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
1

從JSON RFC-4627:JSON text SHALL be encoded in Unicode. The default encoding is UTF-8. 使用mb_convert_encodingiconv改變字符串編碼。

,併發送正確的頭:

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