2008-12-08 91 views
2

我有以下的javascript代碼:json_encode和mysql unicode的問題

http://www.nomorepasting.com/getpaste.php?pasteid=22561

的正常工作(該makewindows功能被改變,以顯示它是一個PHP變量),但是HTML包含Unicode字符,並且只會分配指向第一個Unicode字符的字符。如果我製作一個小測試文件並直接回顯article_desc,則會輸出所有html,但會顯示quatsions標記而不是正確的符號。然而,json_encode似乎縮短了html,導致錯誤。

編輯:這裏是直​​接從HTML我想顯示的mysql數據庫的轉儲:

http://www.yousendit.com/download/TTZueEVYQzMrV3hMWEE9PQ

它說的源UTF-8英寸從呼應出article_desc產生實際的頁面代碼是在這裏:

http://www.nomorepasting.com/getpaste.php?pasteid=22566

絕對是相同的記錄,所以我不清楚爲什麼它似乎很不同。

編輯:這是通過調用:mysql_query('SET NAMES utf8');

+0

你可以看到,如果unicode是正確的數據庫?即是否有問號? – 2008-12-08 14:16:28

+0

從我可以告訴數據庫中沒有問號,但也許不正確的unicode。 – 2008-12-09 12:12:05

回答

-1

我不認爲你需要json_encode。 json_encode將PHP數組和對象編碼爲可讀的JavaScript格式。如果您在ajax中發送純文本或html,則不需要json_encode

+0

json_encode也會處理像轉義你的報價 – 2008-12-08 14:04:05

+0

我的壞你:) – Irmantas 2008-12-08 14:09:45

3

json_encode期望字符串爲UTF-8編碼的字節流。你必須在內部使用utf-8編碼的字符串(這是目前唯一的處理PHP中的unicode字符的方法),或者使用a different library來生成json。

1
json_encode(utf8_encode($Content)); 

這將解決您的問題。

2

我有同樣的問題。我正在使用Zend_Db/mysqli,我的數據庫內容實際上是UTF8。

$conf->db->params['charset'] = 'UTF8'; 

如果您使用的,而不是庫MySQLi PDO,你可以這樣來做:

$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;'); 
$conf->db->params['driver_options'] = $pdoParams; 

如果你不

我問我的數據庫適配器使用UTF8解決的問題使用Zend_Db但使用mysqli,你可能想看看http://php.net/manual/en/mysqli.set-charset.php

來源:http://www.zfsnippets.com/snippets/view/id/13