2013-02-26 39 views
3

我有一個包含花(智能?)撇號MySQL數據庫(utf8_general_ci)字段:Owner’s...在PHP的json_encode截斷之前轉義JSON撇號?

這將打印精細,無特殊處理,如果我訪問從數據庫中拉它的PHP頁面。但是,我試圖通過另一頁上的$ .getJSON請求來訪問它,所以我使用了PHP的json_encode。它截斷該值,以便它讀取Owner,然後成功編碼其餘數據。如果我在json_encode之前在字段上使用PHP的utf8_encode,它將包含編碼爲\u0092的完整值,然後它不會在頁面上打印任何內容,並給我Owners。 PHP的htmlentitieshtmlspecialchars不起作用。

查看Chrome工具中的請求,Owner’s在$ .getJSON頁面上顯示爲Owner�s

任何人都可以幫助我嗎?我已經閱讀了關於SO和網絡的其他問題,但我找不到任何有用的信息,而且我沒有用JSON進行太多的工作。

感謝您的閱讀。

+0

'如果我使用PHP的函數utf8_encode在球場上我json_encode之前,它包括與全部價值的「編碼爲\ u0092'這聽起來像這條路看起來不錯。你能詳細說明這種情況到底失敗嗎? Chrome的工具看起來如何? – 2013-02-26 19:25:19

+0

我認爲你需要爲你輸出的頁面設置編碼。另外,您可能需要解碼UTF-8。 – crush 2013-02-26 19:40:24

+0

@Pekka:在頁面上,「Owner \ 0092s」呈現爲「Owners」,在Chrome的Tools中,它看起來像是「Owner \ 0092s」。 @crush,我擔心這不是正確轉換,因爲搜索\ 0092表明它是一個控制字符(?)而不是一個撇號? http://stackoverflow.com/questions/11030851/jquery-parsejson-u0092-character-is-not-parsed – 2013-02-26 19:56:53

回答

6

使用PHP的utf8_encode()之前我json_encode()確實停止從後切斷數據,但它也它編碼爲\0092這並沒有顯示(控制字符)。當我在查詢之前使用MySQL的SET NAMES utf8時,根本沒有必要使用utf8_encode(),我的json編碼正確,映射到\u2019,這很好地顯示。

感謝鏈接@Pekka,它幫助我縮小了可能性。

+0

在Android或IOS不工作:) – delive 2016-03-22 11:47:09

7

詳情:json_encode

例子:

echo json_encode($array, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE); 
+0

不適用於''「撇號! – delive 2016-03-22 11:11:53

+0

@delive您可以與必要的選項'JSON_HEX_QUOT,JSON_HEX_TAG,JSON_HEX_AMP,JSON_HEX_APOS,JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT,JSON_UNESCAPED_SLASHES,JSON_FORCE_OBJECT,JSON_PRESERVE_ZERO_FRACTION,JSON_UNESCAPED_UNICODE,JSON_PARTIAL_OUTPUT_ON_ERROR'嘗試:http://php.net/manual/en/function.json- encode.php – itsazzad 2016-03-22 18:38:19