"Embrace UTF-8 consistently"
P粉404539732
P粉404539732 2023-08-20 20:33:50
0
2
355
<p> 我正在设置一个新的服务器,并希望在我的Web应用程序中完全支持UTF-8。过去我在现有服务器上尝试过这个,但总是不得不退回到ISO-8859-1。</p> <p>我需要在哪里设置编码/字符集?我知道我需要配置Apache,MySQL和PHP来实现这一点 - 是否有一些标准的检查清单我可以遵循,或者可以排查不匹配的地方吗?</p> <p>这是一个运行MySQL 5,PHP 5和Apache 2的新Linux服务器。</p>
P粉404539732
P粉404539732

membalas semua(2)
P粉497463473

我想在chazomaticus的出色回答中添加一点内容:

也不要忘记META标签(像这样,或者HTML4或XHTML版本):

<meta charset="utf-8">

这似乎是微不足道的,但IE7以前给我带来了问题。

我做的一切都是正确的;数据库、数据库连接和Content-Type HTTP头都设置为UTF-8,在所有其他浏览器中都正常工作,但是Internet Explorer仍然坚持使用“西欧”编码。

结果发现页面缺少META标签。添加了之后问题解决了。

编辑:

W3C实际上有一个相当大的国际化(I18N)专区。他们有许多与此问题相关的文章 - 描述了HTTP、(X)HTML和CSS方面的内容:

他们建议同时使用HTTP头和HTML meta标签(或者在作为XML提供的XHTML的情况下使用XML声明)。

P粉726133917

数据存储:

  • 在数据库中的所有表和文本列上指定utf8mb4字符集。这样,MySQL将以UTF-8的本地编码方式物理存储和检索值。请注意,如果指定了utf8mb4_*排序规则(没有明确指定字符集),MySQL将隐式使用utf8mb4编码。

  • 在旧版本的MySQL(< 5.5.3)中,您只能使用仅支持Unicode字符子集的utf8。我希望我是在开玩笑。

数据访问:

输出:

  • 应在HTTP头中设置UTF-8,例如Content-Type: text/html; charset=utf-8。您可以通过在php.ini中设置default_charset(首选)或手动使用header()函数来实现。
  • 如果您的应用程序将文本传输到其他系统,它们也需要被告知字符编码。对于Web应用程序,浏览器必须被告知以哪种编码方式发送数据(通过HTTP响应头或HTML元数据)。
  • 使用json_encode()对输出进行编码时,作为第二个参数添加JSON_UNESCAPED_UNICODE

输入:

  • 浏览器将以文档指定的字符集提交数据,因此在输入方面不需要做任何特殊处理。
  • 如果您对请求编码有疑问(例如可能被篡改),在尝试存储或在任何地方使用之前,您可以验证每个接收到的字符串是否为有效的UTF-8。PHP的mb_check_encoding()可以实现,但您必须始终使用它。由于恶意客户端可以以任何他们想要的编码提交数据,因此没有办法可靠地让PHP为您执行此操作。

其他代码注意事项:

  • 显然,您将提供的所有文件(PHP、HTML、JavaScript等)都应以有效的UTF-8进行编码。

  • 您需要确保每次处理UTF-8字符串时都能安全地进行。不幸的是,这是最困难的部分。您可能需要广泛使用PHP的mbstring扩展。

  • PHP的内置字符串操作默认情况下不是UTF-8安全的。您可以使用普通的PHP字符串操作(如连接)来安全地执行某些操作,但对于大多数操作,您应该使用等效的mbstring函数。

  • 要了解自己在做什么(即:不搞砸它),您真的需要了解UTF-8以及它在最低级别上的工作方式。查看utf8.com上的任何链接,了解您需要了解的所有内容的一些好资源。

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!