在phpmyadmin中正确显示泰语字符但不在前端

时间:2014-03-05 15:25:30

标签: php character-encoding thai southeast-asian-languages

最近几个小时我努力但未能找到解决方案。为什么会这样...... 我有一个collat​​ion = utf8_general_ci的表,它的列/字段整理也设置为utf8_general_ci。 我可以从phpmyadmin正确地看到泰国数据。但是当我获取这个表数据并使用php代码显示它时会显示???????

click查看页面。

在这个页面中我直接写了一个泰语单词,当我从数据库中取出并显示它时显示正确但相同的单词/文字???

我正在使用

<meta http-equiv="Content-Type" content="text/html; charset=tis-620"> 

目前和我尝试过

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

我发现Direct和来自数据库的文本/单词显示为?????

2 个答案:

答案 0 :(得分:0)

我有时会遇到西班牙语这个问题,即使我在html中设置了内容类型,它仍会显示错误的编码类型。

对我来说有用的是如果我用正确的格式“保存php文档”然后修复了这个问题。

您看到文档从Apache中断开,或者无论您使用什么,它都会发送它读取的文档类型,但您的PHP代码会动态地从数据库中获取内容。

所以我会做以下事情:

在HTML中写下泰语单词并使其正确显示。尝试通过将文档保存为不同的编码选项来执行此操作。这通常是保存对话框中的选项,一旦显示它,然后尝试从数据库中提取它。

当然,您可以强制Apache以您想要的编码方式提供文档,但这假设您可以访问这些设置。

我希望有所帮助。

答案 1 :(得分:0)

您的MySQL连接本身可能没有使用utf8。从MySQL手册:

SET NAMES indicates what character set the client will use to send SQL statements 
to the server. Thus, SET NAMES 'cp1251' tells the server, “future incoming 
messages from this client are in character set cp1251.” It also specifies the 
character set that the server should use for sending results back to the client. 
(For example, it indicates what character set to use for column values if you use 
a SELECT statement.)

根据您连接数据库的方式(mysql_connect / mysqli_connect或PDO),步骤略有不同。如果使用mysql_connect();mysqli_connect;,则需要运行mysql_query("SET NAMES utf8");。在使用PHP PDO时,您可以使用相同的步骤,但也可以在PDO对象构造期间设置init命令。这是我的数据库交互类的一个例子。

$dsn = 'mysql:host='.$database_detail['dbhost'].';dbname='.$database_detail['dbname'];
$this->dbh = new PDO($dsn, $database_detail['dbuser'],
    $database_detail['dbpass'], array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => FALSE,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
));