【发布时间】:2011-09-26 03:54:03
【问题描述】:
我遇到了here(以及其他地方)描述的类似问题- 在 ajax 回调中,我得到一个看起来不错的 xmlhttp.responseText(当我提醒它时 - 它显示正确的文本) - 但是当使用“if”语句将其与字符串进行比较时 - 它返回 false。
(我也是编写返回该字符串的服务器端代码的人)——经过大量研究该字符串——我发现该字符串有一个“不可见字符”作为其第一个字符。未显示的字符。如果我将它复制到记事本 - 然后删除第一个字符 - 直到再次按 Delete 才会删除。
我为 xmlhttp.responseText 中返回的字符串做了一个 charCodeAt(0)。它返回 65279。
谷歌搜索显示它是某种 UTF-8 控制字符,应该设置“big-endian”或“small-endian”编码。
所以,现在我知道了问题的原因——但是……为什么要回显该字符? 在源 php 中,我只是使用
echo 'the string'...
它显然以某种方式输出 [chr(65279)] 字符串...
为什么?我该如何避免呢?
【问题讨论】:
-
这取决于数据。没有看到你的代码,我们不能说。您是否控制 ajax 正在提取的数据?它是如何提供给 ajax 的?
-
它来自我写的一个php文件。 php 回显字符串“CHECKTABLE OK”。问题是 - 即使我只是在浏览器上运行 php - 然后复制粘贴回显的字符串 - 然后我检查并看到 chr-65279 位于字符串的开头......
-
顺便说一句,该字符也称为字节顺序标记 (BOM) 字符...
-
您使用什么编辑器来编辑您的 PHP 文件?使用允许更改编码的编辑器,例如EmEditor,并以“二进制”形式打开您的 PHP 文件,看看您是否在字符串的开头或文件的开头看到任何奇怪的字符。这应该告诉我们 BOM 是在源文件中还是稍后添加。
-
我用十六进制编辑器打开了 php。 BOM 不存在。我很确定它是稍后添加的...
标签: php javascript ajax utf-8