2

我已经开发了 1 年的 web 应用程序,环境是(apache、php、html5 和 javascript)。在此之前我并不关心编码问题。这就像魔法一样。我只是在配置文件中设置了 mysql 连接UTF-8 和忘记。
但是随着经验的增长,我遇到了一些情况,我需要完全了解在这种环境中如何解决编码问题。当我得到一些东西时,我会想念其他的东西。所以我无法获得完整的画面。
要清楚:

  • Javascript 字符串是 UTF-16
  • HTTP 传输编码是任意的。
  • PHP 字符串是二进制的。
  • Mysql连接也是任意的。

转换是如何完成的以及我需要关心的可能问题是什么。

4

2 回答 2

5

他们不是任意的,他们是你告诉他们的。所以总的来说,你可以把所有东西都做成 UTF-8,你很好。

Javascript 字符串在内部只是 UTF-16。您发送的 JS 文件可以是 UTF-8。如果您告诉浏览器响应具有哪种编码,浏览器将能够转换为它需要的任何编码。只有当您指定的编码与实际发送的编码不同时,问题才会开始。

为什么是 UTF-8?

  • 每个 ANSI 编码都有指定所有字符的问题(只有 256 个不同字符的空间)。
  • UTF-8 通常是最紧凑的 unicode 格式,尤其是在传输西方语言时。
  • UTF-8 是唯一不受 Linux 和 Windows 之间的字节顺序标记差异影响的 unicode 编码,尽管这也是您通常不必担心的事情。

推荐阅读: 每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

于 2013-08-05T08:51:27.707 回答
4

这个问题只存在于两个系统之间的边界。在一个系统中(单独的 PHP、数据库、Javascript 等),有明确的方法来处理编码,而且通常没有什么摩擦。问题通常是二进制数据的 blob 从一个系统传输到另一个系统,例如 PHP 到数据库,而没有在随附的元数据中正确指定该 blob 的编码

系统之间的不同接口有不同的方式来指定所需的元数据。PHP 和数据库之间的接口允许指定连接编码,这使数据库“了解” PHP 使用什么编码以及它期望返回什么编码。在 Web 服务器/PHP 和浏览器之间有 HTTP 标头和/或 HTML 元标记,允许指定此元数据。

一个系统总是必须让步。任何一个系统都以特定编码发送数据,告诉接收者这是什么编码以及接收者必须处理它;或者收件人可以预先指定它需要什么编码,并且发件人必须在发送之前将其转换为该编码。

  • 在 PHP 和大多数数据库之间,PHP 指定要使用的编码,并且数据库会即时将文本转换为该编码
  • 在 web 服务器/PHP 和浏览器之间,服务器/PHP 声明它发送的内容的编码是什么,浏览器必须处理它
  • accept-charset如果浏览器通过表单的属性发送任何数据,或者浏览器从它接收到的内容推断它,服务器还声明它期望的编码
  • Javascript 在浏览器处理后接收文本,因此它并不真正关心编码
于 2013-08-05T08:57:35.183 回答