php - 更改 MySQL、PHP 脚本、HTML 中的字符编码

标签 php mysql encoding utf-8

所以,我在这个系统上构建了很长一段时间,它目前正在向网络浏览器输出 Latin1 (ISO-8859-1),这是组件:

MySQL - 所有数据都使用 Latin1 字符集存储

PHP - 所有 PHP 文本文件都以 Latin1 编码存储在磁盘上

HTML - 输出具有 http-equiv="content-type"content="text/html; charset=iso-8859-1"元标记

因此,我试图了解不同部分的编码如何在我的工作流程中发挥作用。如果我打开一个 PHP 脚本并将其在文本编辑器中的编码更改为 UTF-8,然后将其保存回磁盘并重新加载 Web 浏览器,那么文本就会一团糟——除非文本来自数据库。如果我将数据库的编码更改为 UTF-8 并将 PHP 文件保留在 latin1 中,我必须使用 utf8_decode() 才能正确显示数据。如果我更改 HTML 代码,浏览器将无法正确读取它。

是的,我意识到如果我想“升级”到 UTF8,我必须更新此设置的所有三个部分才能正常工作,但由于它是一个庞大的系统,包含大约 18 万行 PHP 代码和数百万行许多数据库/表中的帖子,我不想在没有正确理解所有内容的情况下开始这样的事情。

我没有想到什么?除了修复之外还有什么能把它搞得一团糟?更改整个 MySQL 安装的编码的过程是什么?更改磁盘上成百上千个 PHP 文件的编码的最简单方法是什么?

幸运的是,META 标签是动态添加的,所以我只会在一个地方更改它:)

让我听听您对此的体验。

最佳答案

这很棘手。

你必须:

  • 更改数据库和每个表的字符集/编码——我不太了解 MySQL,但请参阅 here
  • 在第一次查询之前,在 PHP 中将客户端编码设置为 UTF-8 (SET NAMES UTF8)
  • 更改元标记和可能的 Content-type header (注意 Content-type header 优先)
  • 将所有 PHP 文件转换为不带 BOM 的 UTF-8 - 您可以使用循环和 iconv 轻松完成此操作。
  • 最棘手的是:您必须更改大部分字符串函数调用。 Than 意味着 mb_strlen 而不是 strlenmb_substr 而不是 substr$str[index]

关于php - 更改 MySQL、PHP 脚本、HTML 中的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2988462/

相关文章:

php - 在 Blade 模板上显示 JSON 对象

mysql - 合并来自多个表的这些 mysql 查询

php - MYSQL/PHP/JQUERY - Blob 进入图片库,如何解决问题?

php - 使用 PHP 函数以绝对定位显示图像?

mysql - 使用 MySql 数据库中的值填充 VB 中表单上的数据网格

mysql - 在 bills.item_id = cars.id 上加入账单

php - 如何检测非西方字符?

asp.net - URL 编码的表单数据无效

PHP json_encode 变音符号

php - 在退出 apache/xampp 之前运行命令