如何解决网络中的编码问题

时间:2013-08-05 08:38:55

标签: php javascript mysql web

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

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

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

2 个答案:

答案 0 :(得分:5)

它们不是任意的,它们是你告诉它们的。所以一般来说,你可以把所有东西都改成UTF-8,你就没事了。

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

为什么选择UTF-8?

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

推荐阅读: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

答案 1 :(得分:4)

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

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

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

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