我的网站上显示é字符而不是“é”。
我发现这个帖子UTF-8 all the way through很棒,但没有帮助我。我不明白为什么。
从Mysql数据库中提取数据。 SHOW VARIABLES给出了:
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/
collation_connection : utf8_unicode_ci
collation_database : utf8_general_ci
collation_server : utf8_general_ci
我的php Header + PDO :: connexion代码如下,将utf-8设置为charset:
<!DOCTYPE HTML>
<html>
<head>
<?php header("Content-type: text/html; charset=utf-8"); ?>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
$db = new PDO( 'mysql:host=host.mysql.db;dbname=dbname;charset=utf8', 'user', '');
$db->exec('SET NAMES utf8');
然后我的PDO:查询代码如下,我没有指定字符集,但我不明白为什么/怎么做:
$query="SELECT * FROM db where rank = 1 limit 30";
$req = $db->query($query) or die(print_r($db->errorInfo(), true));
$req->setFetchMode(PDO::FETCH_ASSOC);
$data1 = array();
$data1 = $req->fetchAll();
最后我打印数据,给出characters字符。
<?php for($i = 0; $i < 5; ++$i):
$title = utf8_encode($data1[$i]['title']);
echo mb_check_encoding($title, "UTF-8"); // prints 1 (True)
echo $title; // prints é
注意:如果我在“data”而不是“utf8_encode()”上使用“utf8_decode()”,我会收到 字符。
我使用的是Notepad ++,我的文件编码为“UTF8 without BOM”。
提示:它适用于localhost数据库。我把它放在网上(OVH),现在我有这些characters©字符。
在这个本地数据库中,SHOW VARIABLES给出:
character_set_client : utf8mb4
character_set_connection : utf8mb4
character_set_database : latin1
character_set_filesystem : binary
character_set_results : utf8mb4
character_set_server : latin1
character_set_system : utf8
character_sets_dir : c:\wamp64\bin\mysql\mysql5.7.11\share\charsets\
check_proxy_users :OFF
collation_connection : utf8mb4_unicode_ci
collation_database : latin1_swedish_ci
collation_server : latin1_swedish_ci
答案 0 :(得分:2)
您的数据应该已经在UTF-8
中编码,因此您不应该在那里拥有utf8_encode
功能。
函数utf8_encode
将ISO-8859-1
字符串编码为UTF-8
,这不是您所需要的。
只需删除此功能即可。