php 数据库 utf8 字符串 比较 中文,php - MySQL数据库中UTF-8字符串的PHP输出编码问题 - SO中文参考 - www.soinside.com...

我知道这个问题一直以一种或另一种形式出现,但是我对如何解决这个问题有些困惑。我有一个运行MySQL的PHP​​网站,该网站显示一些扩展字符为乱码。据我所知,从内容导入到在屏幕上显示的每一步,所有代码均编码为UTF-8。尽管如此,它仍然显示出奇怪的编码问题。这是第一个测试示例(NaturalPhënåm¥na,这是有目的的),mb_detect_encoding标识为UTF-8,我只能使用utf8_decode正确显示它:no utf8_decode: Natural PhënÃ¥mÂ¥na

utf8_decode: Natural Phënåm¥na

第二个示例,它甚至从来都无法正确utf8_decodes(应该是ümlaut和“ typographer的引号”(作为测试目的,故意添加了扩展字符:no utf8_decode: This pürson from “Vancouver, Canadaâ€

utf8_decode: This pürson from �??Vancouver, Canada�?�

我最初的想法是它是双重编码的,但是我不认为这是怎么回事。当我在命令行中执行查询时,MySQL中的所有内容均正确显示。

这里是我调查过的所有内容的摘要:已验证导入的内容为UTF-8,通过与MySQL的UTF-8连接导入

[MySQL数据库,表,列为UTF-8,utf_unicode _ *

在Amazon RDS上,MySQL中的character_set_client等变量设置为utf8

PHP PDO连接为UTF-8,NAME设置为UTF-8

PHP标头字符集和HTML元字符集均为UTF-8

mb_detect_encoding为两个字符串都返回UTF-8

因此,经过数小时的故障排除后,我有点不知所措。一时兴起,我什至尝试将HTML标头/元和PHP标头设置为ISO-8559-1,但这也没有解决问题。

我上一次与Amazon RDS作战是为了设置正确的变量,但否则我就没主意了。mysql> show variables like '%character%';

+--------------------------+-------------------------------------------+

| Variable_name | Value |

+--------------------------+-------------------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | utf8 |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /rdsdbbin/mysql-5.5.40.R1/share/charsets/ |

+--------------------------+-------------------------------------------+

所以我想知道,我缺少步骤吗?有明显的东西吗?预先感谢。

UPDATE

这是我的PHP输出脚本,用于进一步澄清我提到的“输出”:<?php header("Content-type: text/html; charset=utf-8"); ?>

My test

try {

$dbh = new PDO("mysql:host=localhost;dbname=database",

"user", "password", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

}

catch(PDOException $e) {

echo $e->getMessage();

}

$sth = $dbh->prepare("my select statement");

$sth->execute();

$rows = $sth->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {

echo mb_detect_encoding($row['name']);

echo "
no utf8 decode: ". $row['name'] . "
\n";

echo "single utf8 decode: ". utf8_decode($row['name']) . "
\n";

echo "no utf8 decode: ". $row['description'] . "
\n";

echo "single utf8 decode: ". (utf8_decode($row['description'])) . "
\n";

}

?>

UPDATE#2我还尝试过直接将这些相同的字符从PHP回显和直接的静态HTML输出到浏览器中,并且这些字符显示得很好。echo "“test ü ö”
"; ?>

“test ü ö”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值