在我的网页中,有一个包含多个输入的表单。但是,输入字符的行为与输入“标签”字符不同。我尝试将文件编码设置为 UTF-8 和 UTF-8 +BOM(我使用的是 EditPlus)。
使用 UTF-8:
使用 UTF-8 + BOM:
输入字符来自 mysql 数据库,其中排序规则是 utf8_unicode_ci(使用 phpmyadmin),所以我不知道这是否是问题的根源。有任何想法吗?
在我的网页中,有一个包含多个输入的表单。但是,输入字符的行为与输入“标签”字符不同。我尝试将文件编码设置为 UTF-8 和 UTF-8 +BOM(我使用的是 EditPlus)。
使用 UTF-8:
使用 UTF-8 + BOM:
输入字符来自 mysql 数据库,其中排序规则是 utf8_unicode_ci(使用 phpmyadmin),所以我不知道这是否是问题的根源。有任何想法吗?
这意味着两条数据的编码不同。如果文件被解释为 Latin-1(或类似的编码),您会得到第一个结果,其中输入字段中的数据是有效的(意味着它是 Latin-1 编码的)但标签是错误的(意味着它不是 Latin- 1 编码)。当文件被解释为 UTF-8 时,标签是正确的(意味着它是 UTF-8 编码的)但输入字段中的数据是错误的(意味着它不是 UTF-8 编码的)。如果数据显示为 UNICODE REPLACEMENT CHARACTER,则表明文档被解释为 Unicode 编码(例如 UTF-8),但字节序列无效。
我猜标签在文件中是硬编码的,但输入字段中的数据来自数据库。在这种情况下,您需要将数据库的连接编码设置为返回 UTF-8。
至于为什么在没有 BOM 的 Latin-1 和带有 BOM 的 UTF-8 中解释文件的原因:因为浏览器将 BOM 识别为表示 UTF-8,没有它它默认为 Latin-1。您需要设置正确的 HTTP 标头来告诉浏览器文件的编码是什么,并摆脱 BOM。
阅读这些资源:
解决了它:刚刚将文件更改为“西欧(Windows)1252”(使用EditPlus),现在每个字符都正确显示。