你说得没错,
UTF-8
是Web应用程序的一个不错的选择。
编码是处理数据的元信息。只要你知道(二进制)数据的编码,你就知道你在处理什么。如果你不知道编码,你就会迷失方向。我经常将其比喻为一个链条,如果编码链条中断了,数据也会被破坏。这对于显示数据和安全性都是正确的。
PHP本身是二进制的,它依赖于上下文/您来指定编码(例如,如何保存您的PHP源代码文件)。
所以我们来看一下一个简短(不完整)的清单:
操作系统
环境变量可能会告诉你正在使用的语言环境和编码。例如,文件系统的文件和目录名称都有自己的编码。我对这个问题并不十分熟悉,通常我们尝试使用英语来命名我们的文件,因此只使用
US-ASCII
字符范围是安全的,该字符集可用于
ISO-8859-1
和
UTF-8
等拉丁扩展字符集。
当用户上传文件时,请记住过滤掉基本字母和标点符号,这样你几乎不会遇到任何问题(
a-z
,
A-Z
,
0-9
,
.
,
-
,
_
),甚至为了视觉效果将它们全部转换为小写。
如果你觉得这会降低可用性,而文件系统并没有提供UTF-8范围内的Unicode字符,则可以回退到类似
rawurlencode(百分号编码,三元组)这样的简单编码,并通过解析该名称到磁盘上来提供文件下载。
通常情况下,你只需要处理自己拥有的内容。开始询问一位普通的系统管理员或程序员有关字符编码的问题,大多数人会告诉你他们对此不太感兴趣。当然这是主观的,但如果你需要有人为你配置某些内容,这可能会有所不同。
HTML
这与PHP几乎无关,它涉及到你的脚本输出的领域。
通常的经验法则是:明确指定。如果你没有指定(HTML文件、CSS文件、Javascript文件),请不要指望它能正常工作。确保每个组件都知道自己的编码。否则,浏览器只能猜测。
UTF-8
是一个不错的选择,但我们的工作就是确保它的精确和明确定义。
PHP设置
作为一个经验法则,首先阅读随你的linux发行版一起提供的PHP包中的
php.ini
文件。它在注释中带有易读的文档和进一步的链接。以下是我想到的一些设置:
字符串
回答你的问题:设置和参数的需求始终取决于您使用的组件。对于像浏览器或Web服务器这样的通用组件,可以提供推荐设置以使其配置为
UTF-8
。但对于其他所有内容,都要视具体情况而定。最重要的是要寻找它,并确保您知道编码并可以进行配置/指定。通常会有文档记录。只要您不需要处理可移植代码,这就更简单了,因为您可以控制环境或仅需处理特定环境。编写有关编码的防御性代码,您应该就没问题了。