在非英语web系统(php/mysql)中避免编码/排序字符错误的最佳方法?

mspsb9vt  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(330)

这个问题在这里已经有答案了

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服务器上运行系统时,我倾向于看到更多的字符集问题。

elcex8rz

elcex8rz1#

将所有编码设置为相同的值总是一个好方法,否则,您将处理编码问题。

数据库(特别是mysql)

以mysql为例,你很擅长 utf8 或者 utf8mb4 . 无论什么更适合您的应用程序,您能在这里阅读:utf8mb4和utf8字符集在mysql中的区别是什么?。但是您应该为每个数据库、表和列设置它。你不应该把它们混在一起。
将mysql的连接编码设置为utf-8。您可以使用手动执行此操作 SET NAMES utf8 .

迈斯克利

<?php

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->set_charset("utf8")

^1:mysqli\u set\u charset-php文档

pdo公司

<?php

$db=new PDO("mysql:host=localhost;dbname=database", "username", "password");
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");

^2:pdo::setattribute-php文档

编辑

此外,它还取决于您在编辑器或ide中使用的编码,分别是文件保存的编码。大多数现代IDE都使用 utf8 默认情况下,但是一些编辑器(如notepad++)需要一些额外的配置。

模板

使用 charset -元标记:

<meta charset="UTF-8">

相关问题