在UTF-8中显示法语重音字符的问题

时间:2010-06-28 09:32:37

标签: php encoding utf-8

我正在使用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中正确显示重音字符?

4 个答案:

答案 0 :(得分:9)

检查@@character_set_results。默认情况下,MySQL使用latin1,而不是utf8。试试SET NAMES utf8mysqli::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");
}