2016-08-30 47 views
0

我正在使用codeigniter。
運行以下查詢後:無法顯示從AES_DECRYPT檢索到的特殊字符

$names = this->db->query("SELECT AES_DECRYPT(nombre,'".$key."') AS nombre FROM places")

我得到的var_dump下面的輸出($名)

[43]=> 
array(1) { 
    ["nombre"]=> 
    string(41) "Industriales de Campeche" 
} 
[44]=> 
array(1) { 
    ["nombre"]=> 
    string(67) "Evaristo Garc�a ESE" 
} 
[45]=> 
array(1) { 
    ["nombre"]=> 
    string(39) "San Jose Popay�n" 

上的phpmyadmin查詢的結果是這樣的:

enter image description here

正如你所看到的,包含特殊字符的字段顯示在它的十六進制表示中灰。當我使用這個工具http://www.rapidtables.com/convert/number/hex-to-ascii.htm我可以毫無問題地轉換十六進制字段(特殊字符顯示),但事情是我不能讓它在codeigniter中工作。即使我使用utf-8編碼,特殊字符仍然顯示爲 。

值得一提的是,我在加密數據庫之前沒有問題。

+1

http://stackoverflow.com/questions/279170/how-to-support-utf-8-completely-in-a-web-application – Sammitch

+0

我有試過所有的那 – hjsjar

+0

你說「我已經嘗試了所有這些」,但你真的讀過它嗎? MySQL UTF-8編碼是***不是UTF-8編碼。我假設你的數據列是「blob」類型的?和/或「unicode」?請詳細說明你的表格結構。 – Martin

回答

0

你需要做兩件事情

  1. 設置表和字段排序規則爲 「utf8_general_ci」
  2. 設置中繼內容的HTML像下面

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

我很抱歉,但這完全沒有幫助,它可能值得一讀[鏈接](http://stackoverflow.com/questions/279170/how-to-support-utf-8-completely-in-a-網絡應用)由Sammitch在他的評論中給出 – Martin

0
  • 類型檢查你的MySQL數據列是使用_unicode_還是utf8mb4_字符整理。同時檢查整個表格是否使用相同的字符集(在PHPMyAdmin中查看<table> -> Operations -> Collation)。

  • 檢查您的MySQL連接是否使用UTF8mb4_連接字符集(見下文)。

  • 檢查你的HTML頭被設置爲UTF-8(頁面<head>部分,雖然這不能傷害設置爲UTF-8。)。

我敢肯定你的問題涉及您連接到您的數據庫從你的PHP(或其他)不是必需的完整的UTF-8字符集。

// In your database connection class. 
// Once initial contact has been established 
$this->dbObject->set_charset("utf8mb4"); 

一些進一步閱讀: UTF-8 all the way through