2014-05-10 33 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数据库表列中保存这些数据。

相关问题