2014-05-10 29 views
4

我正在開發一個以本地語言提供信息的本地網站。在我的MySQL數據庫中,有一個名爲pageContent的表,它有一個名爲「text」的列。該「文本」字段類型是文本和歸類utf8_sinhala_ci如何從PHP中的mysql數據庫取得unicode字符

enter image description here

在MySQL中它顯示的字體正常:

enter image description here

但是,當我把它到PHP頁面,回顯該值,然後顯示類似??????????的問號。

enter image description here

但是,如果我硬編碼的東西,回聲,那麼它在PHP頁面也顯示正常。

enter image description here

我覺得不順心的事時,我採取的值從數據庫中。但是我找不到這個錯誤。 我也試過下面的代碼。

mysql_query ("set collation_connection='utf8_sinhala_ci'"); 
    $result = mysqli_query($this->connecDB,"SELECT * FROM pageContent"); 

但這並不起作用。

回答

3

當我從數據庫中取值時,我覺得出了點問題。但是 我找不到該錯誤。我也試過以下代碼。

您需要確保從連接,數據庫到表的所有鏈都是UTF8清理。我有一個詳細的答案a similar question here

但在你的情況,檢查實際的MySQL服務器my.cnf文件。下面將整個產業鏈設置爲UTF-8:

[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 

[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 

更直接的是,看看你的代碼:

mysql_query("set collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent"); 

在一個行,你在呼喚mysql_query,並在下次呼籲mysqli_query。但是這些是不應該一起使用的相互矛盾的方法。它應該僅僅是mysqli_query像這樣:

mysqli_query($this->connecDB, "SET collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent"); 

注意我怎麼你SET collation_connection='utf8_sinhala_ci'之前設置mysqli_query($this->connecDB,…。這將在您使用$result的同一連接上發送查詢。或者你可以試試這個:

mysqli_query($this->connecDB, "SET NAMES 'utf8'"); 
$result = mysqli_query($this->connecDB, "SELECT * FROM pageContent"); 
+1

非常感謝您的幫助。現在它的工作:) – tishantha

+0

其實,你需要[使用'utf8mb4'而不是'utf8'](http://mths.be/utf8mb4)來支持完整的Unicode。 –

1

確保你自己的PHP文件使用與你的數據庫相同的編碼(UTF8)。這已經導致我通過錯誤。

如果這沒有幫助,一個醜陋的解決方案是將輸出與utf8_decode()轉換。

+0

PHP和HTML沒有問題,但「如果我硬編碼並回顯,那麼它也能正常顯示在PHP頁面中」。問題是數據庫連接和排序問題。 – JakeGould

+1

好吧,我推斷,由於屏幕截圖來自PHPMyAdmin,並且它工作,問題必須在PHP文件中的某處。無論如何,你的答案顯示出更多深刻的知識,教會了我新的東西:) – luttkens

0

所以在我的情況下,我曾嘗試將mysql的排序規則從utf8mb4_unicode_ci更改爲不必更改爲uft8_general_ci

然後粘貼:

mysqli_set_charset($con, 'utf8'); 

之前,我做了SELECT命令。

這是我從數據庫中讀取代碼:

/* 

$DB_SERVER="db_server_name"; 
$DB_USER_READER="root"; 
$DB_PASS_READER="passw*rd"; 
$DB_NAME="db_name"; 
$DB_PORT="port number"; 

$SELECT_WHAT="`name_of_column_as_in_your_table`"; 
$WHICH_TBL="`table_name`"; 
$ON_WHAT_CONDITION="`id`='7'"; 

*/ 


$con = mysqli_connect($DB_SERVER, $DB_USER_READER, $DB_PASS_READER, $DB_NAME, $DB_PORT);//this is the unique connection for the selection 

    mysqli_set_charset($con, 'utf8'); 


     $slct_stmnt = "SELECT ".$SELECT_WHAT." FROM ".$WHICH_TBL." WHERE ".$ON_WHAT_CONDITION; 

    $slct_query = mysqli_query($con, $slct_stmnt); 

     if ($slct_query==true) { 
//Do your stuff here . . . 
} 

和它的工作就像一個魅力。祝一切順利。上面的代碼可以讀取中文,俄文或阿拉伯文或任何國際語言從mysql數據庫表列中保存這些數據。

相關問題