排序规则和字符集不是一回事。您的归类需要匹配字符集,因此,如果您的字符集是 utf-8,则归类也应该匹配。选择错误的排序规则不会弄乱你的数据 - 只是让字符串比较/排序工作错误。
也就是说,有几个地方,你可以在PHP中设置字符集设置。如果可能的话,我建议您始终使用utf-8。需要指定字符集的位置包括:
- 数据库。这可以在数据库、表和字段级别进行设置,甚至可以在每个查询级别进行设置。
- PHP 和数据库之间的连接。
- HTTP 输出;确保 HTTP 标头指定 utf-8。您可以在PHP和Apache中设置默认值,也可以使用PHP的
head函数
。Content-Type
- HTTP 输入。通常,表单将使用与提供页面时相同的字符集提交,但为了确保这一点,应指定
accept-charset
属性。还要确保URL是utf-8编码的,或者避免在url中使用非ascii字符(和GET参数)。
utf8_encode
/解码函数的名称有点奇怪。它们专门在 latin1 (ISO-8859-1) 和 utf-8 之间转换。如果应用程序中的所有内容都是 utf-8,则不必过多地使用它们。
关于utf-8和PHP至少有两个陷阱。首先,PHP的内置字符串函数期望字符串是单字节的。对于很多操作来说,这并不重要,但这意味着你不能依赖strlen
和其他功能。此页面上有一个很好的限制。通常,这不是一个大问题,但是特别是在使用3方库时,您需要注意事情可能会因此而爆炸。一种选择是使用mb_string扩展,该扩展可以选择用utf-8感知的替代方案替换所有麻烦的函数。它仍然不是100%防弹解决方案,但它在大多数情况下都有效。
另一个问题是,某些 PHP 安装仍然打开了magic_quotes
设置。这个问题与utf-8正交,但可能导致一些挠头。为了你自己的理智而把它关掉。