【问题标题】:Same file displays differently based on HTML or PHP file extension同一文件根据 HTML 或 PHP 文件扩展名显示不同
【发布时间】:2018-03-06 22:42:50
【问题描述】:

我有以下两个文件:

http://www.roostertooths.com/content/rvb/translations/test.html

http://www.roostertooths.com/content/rvb/translations/test.php

它们都具有以下字符编码:

<meta charset="iso-8859-1">

这两个文件的唯一区别是它们的文件扩展名。但是,当您在浏览器中查看时,重音字符在 html 版本上正确显示,但在 php 版本中是菱形问号。这对我来说似乎很奇怪。有没有人对如何使 php 文件正确显示字符有所了解?

我已经确认将 html 文件复制到新的 php 文件会重现问题,所以并不是我的 ftp 程序在上传时对它们进行了不同的编码。更多信息:

file test.html
test.html: ISO-8859 HTML document text, with very long lines

file test.php
test.php: ISO-8859 HTML document text, with very long lines

【问题讨论】:

  • “这两个文件的唯一区别是它们的文件扩展名”这显然不是真的
  • 您的 PHP 文档设置了 Content-Type: text/html; charset=UTF-8 标头,而您的 HTML 没有。

标签: php html character-encoding


【解决方案1】:

PHP 默认字符集可能设置为“UTF-8”。

文件之间的唯一区别在于扩展名,但是扩展名意味着第二个文件由PHP处理,增加了“Content-Type: text/ html; charset=utf-8" 标头。这优先于meta 设置。

您需要更改 PHP.INI 文件中的默认编码。

(实际上,我会在任何地方都使用 UTF-8,因为从长远来看,这会减少麻烦,但我想这取决于您的设置和工作流程)。

【讨论】:

  • 谢谢,我不知道。我这样做的网站实际上有很多带有特殊字符的纯文本文件,所以在这种特殊情况下,我最好清除默认的 php 编码(我在设置文件中使用ini_set( 'default_charset', "" );)。我现在可以停止手动秃顶了。
【解决方案2】:

问题出在标头上,可以看到 PHP 文件将字符集添加到 Content-Type 标头中:

但 HTML 没有:

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2018-08-16
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多