我以为我理解charset是如何工作的,但显然还没有。
使用eclipse我创建一个新的PHP项目。我添加了一个index.php文件(非常简单):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html charset=utf-8" />
</head>
<body>
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=symfony', 'root', '');
foreach($dbh->query('SELECT * from product') as $row) {
print_r($row['description'] ."</br/>");
}
$dbh = null;
} catch (PDOException $e) {
print "Erreur !: " . $e->getMessage() . "<br/>";
die();
}
?>
</body>
</html>
字段'description'是utf8_general
我的数据库是utf8_general
我可以在phpMyAdmin中读到我的数据库服务器charser UTF-8 Unicode(utf8)
我在Apache配置文件中添加了指令'AddDefaultCharset utf-8'
php文件中的charset是utf-8
无论如何,强调的字母都有问题。
要正确显示它们,我可以:
OR
我的问题是:考虑到所有内容都是UTF-8,我的字符串何时在执行行中以iso-8851-1格式化?
答案 0 :(得分:3)
关于UTF-8,Stack Overflow用户在UTF-8 all the way through编译了一个非常全面的检查列表。在您的情况下,缺少的是您没有告诉PDO 连接编码:
$dbh = new PDO('mysql:host=localhost;dbname=symfony', 'root', '');
......应该是:
$dbh = new PDO('mysql:host=localhost;dbname=symfony;charset=utf8', 'root', '');
请注意,当{{1}时,对于PHP 5.3.6或更高版本,不鼓励设置此类编码的所有其他替代方法(即手动或使用SET NAMES utf8
参数运行PDO::MYSQL_ATTR_INIT_COMMAND
) }参数已添加到DSN。
答案 1 :(得分:0)
您还必须将连接设置为UTF-8
$dbh->query('SET NAMES utf8 COLLATE utf8_general')