HTTP与HTML字符集影响JS包含

时间:2012-12-13 14:23:38

标签: php http character-encoding header

我正在更改网站以使用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包括我没想到的休息。显然,它们中有一些第三方代码使用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中的错误?

1 个答案:

答案 0 :(得分:-1)

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

关于这个问题...... php标题控制着服务器发送的输出,所以PHP会改变内容。 META标签只是浏览器的信息“小心,这是UTF-8”。