【问题标题】:How to properly display non-redable characters stored in a MySQL Database如何正确显示存储在 MySQL 数据库中的不可读字符
【发布时间】:2013-03-22 02:19:35
【问题描述】:

我将São Tomé and Príncipe 存储在 MySQL 数据库中。

它在我的网页上显示为S�o Tom� and Pr�ncipe

是否可以直接从数据库中正确显示?

我的 MySQL 类型是 MyISAM,排序规则是 utf8_general_ci

我的网页字符集是<meta charset="utf-8">

字段类型设置为varchar(30),字段排序规则与表utf8_general_ci相同

PHP 功能测试

utf8_decode() 将字符转换为S?o Tom? and Pr?ncipe htmlspecialchars_decode() 将字符转换为S�o Tom� and Pr�ncipe html_entity_decode() 将字符转换为 S�o Tom� and Pr�ncipe quoted_printable_decode() 将字符转换为S�o Tom� and Pr�ncipe htmlentities()返回空白结果

感谢@SAEVEN

在我的查询 SELECT 之前运行它

mysqli_query($GLOBALS['db_link'], "SET NAMES 'utf8'");

【问题讨论】:

标签: php mysql


【解决方案1】:

您是否需要在连接级别指定命名空间排序规则?

我假设您已经了解了基础知识,您的 HTML 标记中的字符集为 utf8。

在执行任何数据库查询之前尝试执行此 SQL 语句:

'设置名称 utf8'

例如,如果您使用的是 PDO

// do your regular connection logic whatever it is
$dbc = new PDO( .... );
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbc->query( 'SET NAMES utf8' );

// run your queries beneath
....

或者可以使用简写

new PDO(
    'mysql:host=mysql.example.com;dbname=awesome_db',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

无论您使用什么 DBAL,该查询都会起作用。只需在用于拉取数据的同一连接上运行它,然后再拉取数据(只需执行一次)

【讨论】:

  • 感谢@saeven - 你帮我解决了我的问题。我用我使用的解决方案修改了我的问题(我按程序编写代码)
  • 很高兴我能帮上忙。除非您以前用头撞过墙壁,否则可能会非常模糊的常见问题。 ;) 感谢您的投票!
猜你喜欢
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2011-10-16
  • 2012-10-24
  • 1970-01-01
相关资源
最近更新 更多