【发布时间】:2017-02-12 18:51:55
【问题描述】:
我有一个托管在 GoDaddy(共享 Windows 服务器)上的网站,我前段时间使用程序 PHP 和 MySQL 数据库编写了该网站。数据库中的某些表包含用户通过某些页面插入的数据,在某些情况下他们插入希腊文本。在过去的 3-4 年里,一切都运行良好,直到最近我被告知该网站由于某种原因而关闭。我联系了 GoDaddy,他们告诉我这一定是我的脚本有问题,但我已经很长时间没有对代码进行任何更改了。无论如何,显然它在我没有做任何事情的情况下在同一天解决了,所以我猜这是他们的服务器的问题,尽管他们告诉我他们方面没有任何改变。
问题在于,从那时起,所有显示从数据库中选择的希腊字符的页面都显示为:Άλλο Î'ίτημα,而不是正确的希腊文本。我知道它们是这样存储在数据库中的(当我使用 phpMyAdmin 访问它时),但我认为直到现在这都是正常的,因为当它们被选择并显示在页面中时它们很好。所以我不知道现在发生了什么,他们不再正确出现。顺便说一句,希腊字符(不是来自数据库)在页面中正确显示。我已经在互联网上搜索了很多关于此的内容,我相信我已经尝试了所有可能的解决方案。我检查过的一些事情(从另一个 SO 答案复制):
- 所有 PHP 文件都保存为 UTF-8 编码(无 BOM,使用 Notepad++)
- MySQL数据库,表和列都设置为utf8_unicode_ci
- PHP 的默认字符集是 UTF-8
我在头文件中使用以下代码:
header('Content-Type: text/html; charset=utf-8');
然后在html头中:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
我使用以下代码连接到我的db连接文件中的数据库:
$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) OR die ('Could not connect to MySQL: ' . mysqli_connect_error() );
mysqli_set_charset($dbc, 'utf8');
服务器运行 PHP 版本 5.2.17,MySQL 版本为 5.0.96。
另一个奇怪的事情是,当我导出数据库并在本地导入它(使用 XAMPP)并使用与网站上相同的 PHP 文件时,希腊字符会正确显示在页面上。但是,我笔记本电脑上的 XAMPP 运行的是 PHP 5.4.7 版,而 MySQL 是 5.5.27 版。
任何建议将不胜感激。
谢谢
【问题讨论】:
-
您如何在数据库中保存希腊字母?我的意思是您在数据库中插入数据的查询。
-
您好@HK007,感谢您的评论。我只使用
mysqli_query($connection,$query),其中查询的形式为INSERT INTO table (col1, col2) VALUES ('$val1', '$val2')。 -
在你的数据库连接代码之后使用
mysqli_set_charset($connection,"utf8");,并且不要发送任何php头来设置代码中的其他字符集。 -
@HK007 你的意思是
header('Content-Type: text/html; charset=utf-8');是出现这个问题的原因?? -
可能是或可能是您多次对其进行编码的原因。因为我也遇到了同样的问题,在我的情况下,我在保存到数据库之前多次编码。
标签: php mysql utf-8 character-encoding