首页 > 解决方案 > 在没有英文网络系统(PHP / Mysql)中避免编码/整理字符错误的最佳方法?

问题描述

自从我开始使用 Apache、PHP/HTML/CSS/JS 和 MySQL 等数据库以来,我总是不得不处理拉丁字符集问题。

我的意思是,从数据库开始,直到视图显示在浏览器屏幕中,通过所有可以更改字符集的实例,我从来没有机会毫无问题地工作,除非在 localhost 中安装 Wamp/Xampp视窗。

我总是尝试在每个可能的地方设置所有字符集/编码/排序规则,但我总是得到不同的结果,具体取决于服务器(Linux、Windows)。

我总是检查:

1) 数据库整理。

2) 表格整理。

3) 列排序。

4) httpd.conf 中的 Apache 字符集配置

5) php.ini 中的 PHP 字符集配置

6) 单独的 php/html 文件编码。

7) 在每个 html 中添加具有相同编码/字符集的标记。

8) 添加具有相同编码/字符集的“ header(... charset...) ”;

但在许多情况下,我不断收到无法识别的字符,而不是重音符号和特殊的拉丁符号。有时它在屏幕上工作正常,但我发现生成的 CSV/Excel 或来自 Web 服务的 JSON 响应等存在问题。

我检查了其他类似这样的帖子: PHP Character encoding questions

我尝试按照提示进行操作,但在某些情况下我无法解决问题。

厌倦了尝试很多事情,我总是最终使用诸如utf8_encode / decodeiconv(...)之类的函数。有时我什至仅通过同时使用utf8_encode/decode来获得所需的结果,一个在另一个内部。可怕。

有没有一种简洁而简单的方法来解决这个问题,而不必使用那些让代码不整洁的可怕功能?操作系统有问题吗?在 Linux 服务器上运行系统时,我倾向于看到更多的字符集问题。

标签: phpmysqlencodingcollation

解决方案


将所有编码设置为相同的值始终是一种好方法,否则,您正在处理编码问题。

数据库(特别是 MySQL)

以 MySQL 为例,你擅长使用utf8or utf8mb4。无论哪种方式更适合您的应用程序,您可以在这里阅读:mysql 中的 utf8mb4 和 utf8 字符集有什么区别?. 但是您应该为每个数据库、表和列设置它。你不应该把它们混在一起。

将 MySQL 的连接编码设置为 UTF-8。您可以使用 手动执行此操作SET NAMES utf8

mysqli

<?php

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

^1: mysqli_set_charset - PHP Docs

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 Docs

编辑

此外,它还取决于您在编辑器或 IDE 中使用的编码,分别是保存文件的编码。大多数现代 IDE 确实utf8默认使用,但像 Notepad++ 这样的一些编辑器需要一些额外的配置。

模板

charset使用-metatag指定 HTML 文档的字符编码:

<meta charset="UTF-8">

推荐阅读