php pdo mysql utf8_PHP:使用PDO从MySQL数据库输出utf8的问题

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

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

$dbo -> exec("set character_set_client='utf8'");

$dbo -> exec("set character_set_results='utf8'");

$dbo -> exec("set collation_connection='utf8_general_ci'");

$prepSnapRetrieve = $dbo->prepare(

"SELECT * FROM znc_log WHERE `nick` LIKE :u AND `tstamp` BETWEEN :t1 AND :t2"

);

$prepSnapRetrieve->execute(array(':u' => str_replace("|osu","", $_GET['u']),

':t1' => $_GET['sns'], ':t2' => $_GET['sne']));

$snapshotListing = $prepSnapRetrieve->fetchAll();

echo("Snapshot of ".$_GET['u']. "'s chat on ".strftime("%e/%m/%g",$_GET['sne']));

echo("
");

foreach($snapshotListing as $chat) {

echo "" . " " . "[" . strftime("%H:%M:%S", $chat['tstamp']) . "]" .

" " . " >" . $chat['channel'] . "< " . "(" .

htmlspecialchars($chat['nick']).") ".htmlspecialchars($chat['message']);

echo("
");

}

这段代码应该解析并输出已存储在UTF-8中的IRC数据 – 但是在回显时,任何unicode内容只显示为:

??????

我已经回顾了几个问题并包含了几个声称的修复,但似乎没有任何效果.使用相同数据库的另一个脚本完美地回应了UTF-8内容,但它使用的是PHP的标准MySQL实现,而不是PDO.我究竟做错了什么?

解决方法:

使用UTF8时有多个故障点:

>确保表格是utf8

使用SQL-Command显示变量;检查表的MySQL字符设置.

>插入的数据是utf8

您可以尝试使用phpMyAdminer或Adminer等工具进行检查

数据插入正确.尝试手动通过该工具插入数据.

通过脚本插入时,请勿使用基本字符串函数.总是使用他们的mbstring

备择方案.设置mb_internal_encoding(‘UTF-8’);让PHP在内部处理UTF-8.

>获取的数据是utf8

我只会使用$pdo-> exec(“SET NAMES utf8”);剩下的就是其余的.因为

SET NAMES x相当于

SET character_set_client = x;

SET character_set_results = x;

SET character_set_connection = x;

>显示的数据是utf8

如果这显示在html页面中,请不要忘记设置元标记或标题

“Content-Type:text / html; charset = utf-8”.

标签:php,mysql,pdo,unicode,utf-8

来源: https://codeday.me/bug/20190716/1480595.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值