我正在使用CakePHP内置的法语网站。我已尝试多种功能尝试将文本转换为UTF-8并正确显示,但到目前为止没有成功 - 任何带重音的字母都显示为带有问号的黑色菱形。当我将浏览器中的字符集更改为ISO-8859-1时,它们会正确显示,但我想使while网站符合UTF-8标准。我用过:
html_entity_decode($ string,ENT_QUOTES,'UTF-8'); htmlspecialchars($ string,ENT_QUOTES,'UTF-8'); 函数utf8_encode
但没有雪茄。页面在标题
中设置为UTF-8
MySQL数据库也使用UTF-8。如何在UTF-8中正确显示重音字符?
答案 0 :(得分:9)
检查@@character_set_results
。默认情况下,MySQL使用latin1
,而不是utf8
。试试SET NAMES utf8
或mysqli::set_charset。
更新:以下是检查正在使用的字符集的方法:
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
详细了解dev.mysql.com。
答案 1 :(得分:5)
首先:检查你的php文件编码!我在Mac上工作,我使用Coda进行编程,它有一个转换字符集的选项,有时我会遇到这样的麻烦,转换为UTF-8总能修复它们。我认为Notepad ++可以在Windows上实现。 (如果对PHP文件执行此操作,则其上的每个字符串都不需要函数htmlspecialchars()
,html_entity_decode
等)
第二:如果您使用的是HTML输出,请检查标题上是否有<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
第三:执行@janmoesen在MySQL数据库上所说的内容。
告诉我一些事情。
答案 2 :(得分:3)
我刚刚修复了一个非常相似的问题,重音字符没有显示。我的数据库表是utf-8编码的,我的html标题是为utf-8正确设置的。
我没有为我的MySQL连接指定一个字符集,在我的情况下,我正在使用PDO。
$this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8;", $username, $password);
现在没问题!
答案 3 :(得分:1)
万一这对使用PHP类的人有所帮助。
我的解决方案是将“字符编码”设置为“连接”。
//connect to MySQL and select DB
public function open_connection() {
$this->connection = new mysqli( DB_SERVER, DB_USER, DB_PASS, DB_NAME );
if ( !$this->connection ) {
die( "Database connection failed: " . mysqli_error() );
}
mysqli_set_charset($this->connection,"utf8");
}