如何在PHP中从mysql数据库获取unicode字符

如何在PHP中从mysql数据库获取unicode字符,php,html,mysql,unicode,Php,Html,Mysql,Unicode,我正在开发一个以当地语言提供信息的当地网站。在我的MySQL数据库中,有一个名为pageContent的表,它有一个名为“text”的列。“文本”列类型为文本,排序规则为utf8\u sinhala\u ci 在MySQL中,通常显示字体: 但当我把它带到PHP页面并回显该值时,它会显示问号,如????? 但若我硬编码了一些东西并进行了回显,那个么它也会在PHP页面中正常显示 当我从数据库中获取值时,我感觉出了问题。但是我找不到错误。 我也尝试过以下代码 mysql_query ("se

我正在开发一个以当地语言提供信息的当地网站。在我的MySQL数据库中,有一个名为pageContent的表,它有一个名为“text”的列。“文本”列类型为文本,排序规则为utf8\u sinhala\u ci

在MySQL中,通常显示字体:

但当我把它带到PHP页面并回显该值时,它会显示问号,如
?????

但若我硬编码了一些东西并进行了回显,那个么它也会在PHP页面中正常显示

当我从数据库中获取值时,我感觉出了问题。但是我找不到错误。 我也尝试过以下代码

mysql_query ("set collation_connection='utf8_sinhala_ci'"); 
  $result =  mysqli_query($this->connecDB,"SELECT * FROM pageContent");  
但这不起作用

当我从数据库中获取值时,我感觉出了问题。但是 我找不到错误。我也尝试过以下代码

mysql_query ("set collation_connection='utf8_sinhala_ci'"); 
  $result =  mysqli_query($this->connecDB,"SELECT * FROM pageContent");  
您需要确保从连接到数据库到表的整个链都是UTF8干净的。我有一个详细的答案

但在您的情况下,请检查实际的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\u query
,下一行您正在调用
mysqli\u query
。但这些方法相互冲突,不应同时使用。它应该是
mysqli\u query
如下所示:

mysqli_query($this->connecDB, "SET collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent");
请注意,我是如何在您的
设置collation\u connection='utf8\u sinhala\u ci'
之前设置
mysqli\u query($this->connecDB,
)的。这将在您用于
$result
的相同连接上发送查询。或者您可以尝试以下操作:

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

请确保您的PHP文件本身使用与数据库相同的编码(UTF8)。这会导致我在传递过程中出错


如果这没有帮助,一个丑陋的解决方案是使用
utf8\u decode()

转换输出,因此在我的例子中,我尝试将mysql的排序规则从
utf8mb4\u unicode\u ci
更改为
uft8\u general\u ci

然后粘贴:

mysqli_set_charset( $con, 'utf8');
就在我执行SELECT命令之前

这是我从db读取的代码:

/*

$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数据库表中读取包含这些数据的中文、俄文、阿拉伯文或任何国际语言。

PHP和HTML很好,如“但是如果我硬编码了一些东西并进行了回显,那么它也会在PHP页面中正常显示。”问题是数据库连接和排序。好的,我推断,由于屏幕截图来自PHPMyAdmin,并且它起了作用,所以问题一定在PHP文件中的某个地方。无论如何,您的回答显示了许多更深入的知识,教会了我新东西:)实际上,您需要支持完整的Unicode。