Php 如何正确显示MySQL数据库中存储的不可编辑字符

Php 如何正确显示MySQL数据库中存储的不可编辑字符,php,mysql,Php,Mysql,我在MySQL数据库中存储了Stão Tomé和Príncipe 它在我的网页上显示为S�哦,汤姆� 公共关系�ncipe 是否直接从数据库中正确显示它 我的MySQL类型是MyISAM,排序规则是utf8\u general\u ci 我的网页字符集是 字段类型设置为varchar(30),字段排序规则与表utf8\u general\u ci PHP函数测试 utf8\u decode()将字符转换为S?o Tom?和Pr?ncipe htmlspecialchars\u decode()将

我在MySQL数据库中存储了
Stão Tomé和Príncipe

它在我的网页上显示为
S�哦,汤姆� 公共关系�ncipe

是否直接从数据库中正确显示它

我的MySQL类型是
MyISAM
,排序规则是
utf8\u general\u ci

我的网页字符集是

字段类型设置为
varchar(30)
,字段排序规则与表
utf8\u general\u ci

PHP函数测试

utf8\u decode()
将字符转换为
S?o Tom?和Pr?ncipe
htmlspecialchars\u decode()
将字符转换为
S�哦,汤姆� 公共关系�ncipe
html\u entity\u decode()
将字符转换为
S�哦,汤姆� 公共关系�ncipe
quoted\u printable\u decode()
将字符转换为
S�哦,汤姆� 公共关系�ncipe
htmlentities()
返回空白结果

多亏了@SAEVEN

在我的查询选择之前运行此命令


mysqli\u查询($GLOBALS['db\u link'],“设置名称'utf8'”)

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

我假设您已经介绍了基本知识,您已经在HTML标记中将字符集设置为utf8

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

“设置名称utf8”

e、 例如,如果您正在使用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,该查询都可以工作。在拉取数据之前,只需在用于拉取数据的相同连接上运行它(只需执行一次)

您的编码类型设置为什么?另请参见@H.Ferrence谢谢,我刚才看到了它。我唯一想到的另一件事是臭名昭著的“BOM”。您的文件是否设置了带有BOM的
?我已经回答了很多与你相关的问题。这是
字节顺序标记
查看关于这个主题的Wiki>-我有一个客户的网站,就是讨厌没有它。谢谢@saeven-你帮我解决了我的问题。我用我使用的解决方案修改了我的问题(我按程序编写代码),很高兴能帮上忙。常见的问题可能非常模糊,除非你以前把头撞在墙上谢谢你的投票!