【问题标题】:Wrong file encoding of html5 file (written in NetBeans)html5文件的文件编码错误(用NetBeans编写)
【发布时间】:2017-05-15 21:56:26
【问题描述】:

我有一个使用 UTF-8 编码保存的 php 文件。

php 文件位于本地 Apache linux 服务器中。

使用 php 文件生成的 html 以 <!DOCTYPE html> 开头,&lt;meta charset="UTF-8"&gt;&lt;head&gt; 部分内。

在服务器的根目录下有一个.htaccess文件,上面有AddCharset UTF-8 .php

/etc/apache2/conf-available/charset.conf 中,AddDefaultCharset UTF-8 行未注释。我在修改charset.conf和创建.htaccess文件之后做了sudo service apache2 restart

浏览器仍然显示错误的字符集。在文本编辑器中有单词diámetro,Chrome 55 显示diámetro

我还应该尝试什么?

来自巴拉圭的问候。

【问题讨论】:

  • 您需要在文本编辑器中将 html 文件本身保存为 UTF-8。哪个文本编辑器?我推荐Notpad++(它是免费的)
  • 我很确定问题是您的文本编辑器文件没有保存为正确的 UTF-8,因此无论该文件的 contents 是什么内容( html5 元标记)如果不保存为 UTF-8,它仍然不会神奇地变成 UTF-8。
  • 文件已经用 UTF-8 编码。我使用 Netbeans。
  • 我在link上传了文件。
  • 谢谢。我查看了文件 (varillas.php),它具有正确的 HTTP 标头以及正确的 HTML5 元标头。但是我自己查看源代码,我看到页面上显示的内容(diá 等)所以问题是 - 我仍然认为 - 您的 NetBeans 保存文件。使用Save As 将文件保存在netbeans 中,并确保选择正确的UTF-8 字符集。

标签: html apache netbeans


【解决方案1】:

好的,这实际上是一个非常有趣的问题,来自带有 OP 的 cmets,并在线查看文件本身;问题不在于服务器或正确设置为 UTF-8 的 HTTP 标头。

HTTP 标头

内容类型:文本/html; charset=UTF-8

HTML5 头部

&lt;meta charset="UTF-8"&gt;

查看此文件的源代码,问题似乎越来越多地是用于写入文件的程序 (NetBeans) 未使用正确的 UTF-8 文件编码保存它。

因为源文件不是 UTF-8,这意味着任何对 HTTP 标头或 HTML5 Head 标签的任何引用都说明使用 UTF-8 将不起作用,因为它们正在尝试将牛奶转换为葡萄酒,而您只能这样做如果你从葡萄酒开始[或者至少是葡萄]!

所以;通过一些研究,我惊讶地发现(从 NetBeans 8.1 / windows 10 开始)您无法设置代码文件的字符集,Netbeans 可以设置项目 em> 字符集,但这有点棘手。关于如何做到这一点,有a guide this this thread(见丹尼的回答)(还有另一个here)。

上述解决方案here还有视频指南。

还看到一些 NetBeans bug reports,其中一些是 6 岁 并且远非理想情况...似乎 NetBeans 使用您的操作系统默认字符编码,例如通常Windows-1252 或类似版本。正如我认为您在这里找到的那​​样,它们与互联网标准编码(例如 UTF-8)的兼容性可能较差。

所以我只能说,如果这是我的选择,我会停止使用 NetBeans,转而使用更可靠的东西,例如 NotePad++

您可以在另一个程序(NotePad++)中打开有问题的文件(varillas.php)并检查页面上显示的字符是否正确(diámetro而不是diámetro)然后另存为 UTF-8 编码文件,然后重新上传文件并刷新您的浏览器(以清除浏览器缓存),看看这是否能解决您的问题。

【讨论】:

  • 文件是UTF-8,我确实在linux的notepadqq和windows的notepadd++中验证了编码。我上传了 php 文件并回显了没有 html 标题的内容,它正确显示了字符。
  • 啊,好吧,HTML5 头部元标记似乎不起作用,但很高兴你解决了它:)
  • 我唯一能想到的另一件事是该文件有一个字节顺序标记,这可能会导致问题,read more here,但 HTML5 元标题本身不应该是一个问题。我想知道它是否与 HTML 标记中的 es 声明冲突?
  • 我已经在没有lang="es" 的情况下使用&lt;html&gt; 进行了测试,结果相同。
【解决方案2】:

代码中有一个 utf8_encode 命令我丢失了,是罪魁祸首。
谢谢你的回答。

utf8_encode 被使用,因为 HTML 正文之前是从 ISO-8859-1 源加载的。然后我修改了代码以从 UTF-8 源加载并忘记删除。

【讨论】:

  • 很高兴你找到了它,你能详细说明一下utf8_encode吗?我不认识它。如果是 PHP 函数,我很难看到它在工作流程中的位置......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-03
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
相关资源
最近更新 更多