& # 195; & # 169;而不是é",绝对不知道为什么


é instead of "é", definitely don't know why

我有一个显示é字符而不是" "的网站。

我发现这个线程UTF-8一路通过这是伟大的,但没有帮助我。我不明白为什么。

数据是从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头+ PDO::连接代码如下,设置utf-8作为字符集:

<!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();

最后打印数据,给出é字符。

<?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_decode()"而不是"utf8_encode()",我会得到"字符"。

我正在使用notepad++和我的文件编码为"UTF8无BOM"。

提示:它在本地数据库上工作。我把它放到网上(OVH),现在我有这些é字符

在本地数据库中,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

你的数据应该已经在UTF-8中编码了,所以你不应该在那里有utf8_encode函数。

函数utf8_encodeISO-8859-1字符串编码为UTF-8,这不是您需要的。

相关文章: