3

我正在更改一个网站以使用来自 iso-8859-1 的 UTF-8 字符集。

当我改变这个:

<meta http-equiv='content-type' content='text/html; charset=iso-8859-1' />

<meta http-equiv='content-type' content='text/html; charset=utf-8' />

一切似乎都可以正常工作,并且发布表单以 UTF-8 格式发送数据。完美的。

但是当我设置这个

<?php header('Content-Type: text/html; charset=utf-8'); ?>

javascript 包括我没想到的中断。显然,他们中有一些第 3 方代码使用 iso-8859-1 编码中的字符,这些字符不会正确更改为 utf-8。所以修复 javascript 代码本身很容易。

HTTP 标头设置为 UTF-8 + HTML 内容类型设置为 UTF-8

  • 中断 javascript 包括
  • 影响发布表单数据的编码

正如预期的那样,它暗示一切都在使用 UTF-8,但是,它破坏了 javascript 包含......它也只破坏了 FireFox 上的 js 包含。我在 IE、Chrome 和 Opera 上测试了这个配置,它运行良好。出于这个原因,我开始认为可能是 FireFox 有问题,这是浏览器中的一个错误(尽管 FireFox 的一个简单修复是将 chartset='iso-8859-1' 添加到脚本标签)。

HTTP 标头设置为 iso-8859-1 + HTML 内容类型设置为 UTF-8

  • 不影响 javascript 包含
  • 但确实会影响发布表单数据的编码

我一直认为 HTTP 标头应该覆盖 HTML 标头中定义的任何不一致的字符集。但是,似乎 JS 包括侦听 HTTP 字符集...而发布数据时忽略 HTTP 标头并侦听 HTML 字符集!?

任何人都可以解释为什么以及它应该以这种方式发生还是可能是 FireFox 17.0.1 中的错误?

4

1 回答 1

-1

如果您可以控制缓冲,请使用http://php.net/manual/en/function.utf8-encode.php否则,只需更改 Javascript 并使其成为 UFT-8。

关于问题... php 标头控制服务器发送的输出,因此 PHP 将更改内容。该 META 标记只是浏览器的信息“小心,这是 UTF-8”。

于 2012-12-13T14:34:35.490 回答