这个问题在这里已经有答案了:
utf-8全程(16个答案)
如何在php中输出一个utf-8csv,excel可以正确读取(30个答案)
两年前关门了。
自从我开始使用apache、php/html/css/js和mysql等数据库以来,我总是要处理拉丁字符集问题。
我的意思是,从数据库开始,直到视图显示在浏览器屏幕上,通过所有可以修改字符集的示例,我从来没有机会不出问题地工作,除了在localhost和windows中安装wamp/xampp。
我总是尽可能地在每个地方设置所有字符集/编码/排序规则,但根据服务器(linux、windows)的不同,结果总是不同的。
我总是检查:
1) 数据库排序规则。
2) 表排序规则。
3) 列排序规则。
4) httpd.conf中的apache字符集配置
5) php.ini中的php字符集配置
6) 单个php/html文件编码。
7) 在每个html中添加具有相同编码/字符集的元标记。
8) 添加“标题(。。。字符集…“,”具有相同的编码/字符集;
但在许多情况下,我不断收到未经认可的字符,而不是口音和特殊的拉丁符号。有时它在屏幕上工作正常,但我发现生成的csv/excels或来自webservice的json响应等有问题。
我查看了其他类似的帖子:php字符编码问题
我试着按照提示去做,但在某些情况下我无法解决这个问题。
厌倦了尝试很多东西,我最终总是使用诸如utf8\u编码/解码或iconv(…)之类的函数。有时我甚至只通过使用utf8\u编码/解码,一个在另一个里面,就可以得到想要的结果。好可怕。
有没有一个整洁而简单的方法来解决这个问题,而不必使用那些让代码凌乱的可怕函数?操作系统有问题吗?在linux服务器上运行系统时,我倾向于看到更多的字符集问题。
1条答案
按热度按时间elcex8rz1#
将所有编码设置为相同的值总是一个好方法,否则,您将处理编码问题。
数据库(特别是mysql)
以mysql为例,你很擅长
utf8
或者utf8mb4
. 无论什么更适合您的应用程序,您能在这里阅读:utf8mb4和utf8字符集在mysql中的区别是什么?。但是您应该为每个数据库、表和列设置它。你不应该把它们混在一起。将mysql的连接编码设置为utf-8。您可以使用手动执行此操作
SET NAMES utf8
.迈斯克利
^1:mysqli\u set\u charset-php文档
pdo公司
^2:pdo::setattribute-php文档
编辑
此外,它还取决于您在编辑器或ide中使用的编码,分别是文件保存的编码。大多数现代IDE都使用
utf8
默认情况下,但是一些编辑器(如notepad++)需要一些额外的配置。模板
使用
charset
-元标记: