怎么了? :-)
我有一个问题,我希望你可以帮助我。
我的一个朋友有一个简单的固体html网站,我实现了一点点的PHP;文章的CRUD系统...我遇到的问题是从mysql数据库中放置和获取西里尔字符。
我想要实现的目标是下一个:
在主导航中有一些分隔的部分,其名称,ID和项目的顺序我想放在mysql中,而不是拉取名称并将每个名称作为链接。名字应该是西里尔字符。
当我使用php mysql_fetch_assoc
函数尝试显示在数据库行中插入西里尔字符的名称,行的归类为utf8_general_ci
,并以{{1}结尾时,问题就来了原创人物。如果我通过提交表单向mysql提交西里尔字符,它会显示类似这样的内容У。
我怎么能解决这个问题,提前谢谢!? : - )
答案 0 :(得分:9)
确保在连接数据库后调用此方法。
mysql_query("SET NAMES UTF8");
还要确保HTML文件的charset元标记设置为UTF-8或在输出前发送标头。
header("Content-Type: text/html; charset=utf-8");
答案 1 :(得分:2)
在我将表格中的“整理”列编码为“utf8_bin”之前,我遇到了同样的问题。
答案 2 :(得分:1)
如果它真的是mysql fetch assoc搞乱你应该尝试: mysql-set-charset
来自文档:
注意:
这是改变的首选方式 charset。使用mysql_query()来 执行SET NAMES ..不是 推荐使用。
还要确保您的文件保存为utf8并检查iconv_set_encoding / iconv_get_encoding
答案 3 :(得分:0)
对于从PHP 5.6和MYSQL 5.1到PHP 7之前版本的遗留项目升级更复杂的人。最新的MySQL / Percona / MariaDB等......
如果项目使用 utf8_encode($ value),您可以尝试从正在准备的值中删除该函数,并使用接受的答案为所有输入设置UTF-8编码。
---或---
尝试将 utf8_encode($ value)替换为 mb_convert_encoding($ value,'utf-8')
PDO用户
如果你正在使用PDO,有两种方法可以设置utf8:
$options = [
\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
];
new \PDO($dsn, $username, $passwd, $options);
---或---
$dsn = 'mysql:host=localhost;charset=utf8;'
new \PDO($dsn, $username, $passwd);
我可以使用 utf8_unicode_ci 确认 mb_convert_encoding($ value,'utf-8')到SQL表适用于 Cyrillic 和元音变音