如何避免在php中重复字符65279?

如何避免在php中重复字符65279?,php,javascript,ajax,utf-8,Php,Javascript,Ajax,Utf 8,我遇到过类似的问题(以及在其他地方)—— 在ajax回调中,我得到了一个xmlhttp.responseText,它看起来很正常(当我向它发出警报时,它显示了正确的文本),但当使用“if”语句将其与字符串进行比较时,它返回false (我也是编写返回该字符串的服务器端代码的人)-在对该字符串进行了大量研究之后-我发现该字符串的第一个字符是“不可见字符”。未显示的字符。如果我将其复制到记事本,然后删除了第一个字符,则在再次按delete键之前不会删除 我在xmlhttp.responseText中

我遇到过类似的问题(以及在其他地方)—— 在ajax回调中,我得到了一个xmlhttp.responseText,它看起来很正常(当我向它发出警报时,它显示了正确的文本),但当使用“if”语句将其与字符串进行比较时,它返回false

(我也是编写返回该字符串的服务器端代码的人)-在对该字符串进行了大量研究之后-我发现该字符串的第一个字符是“不可见字符”。未显示的字符。如果我将其复制到记事本,然后删除了第一个字符,则在再次按delete键之前不会删除

我在xmlhttp.responseText中对返回的字符串执行了charCodeAt(0)。它返回了65279

谷歌搜索发现,这是某种UTF-8控制字符,应该设置“大端”或“小端”编码

所以,现在我知道了问题的原因-但是。。。为什么这个角色会得到回应? 在源php中,我只使用

echo 'the string'...
它显然以某种方式输出[chr(65279)]字符串


为什么??我怎样才能避免它呢?

可能是服务器上有什么东西。如果你知道它在那里,我会绕过它直到解决

myString=myString.substring(1)


切掉第一个字符。

结束语,并指定解决方案:

Windows记事本将BOM字符(3个字节:EF BB BF)添加到使用utf-8编码保存的文件中

PHP似乎并不为此烦恼-除非您将一个PHP文件包含到另一个PHP文件中- 然后事情变得一团糟,字符串被显示,并在前面加上字符(65279)

您可以使用另一个文本编辑器(如记事本+)编辑该文件,并使用编码
“在无BOM的UTF-8中编码”,
这似乎解决了问题


此外,您还可以在记事本中使用ANSI编码保存另一个php文件,这似乎也可以使用(也就是说,如果您实际上没有在文件中使用任何扩展字符,我猜…)

您还可以使用以下方法删除javascript中的字符:


myString=myString.replace(String.fromCharCode(65279),“”)

除上述内容外,我刚从MySQL数据库中提取一些数据时遇到了这个问题(字符集设置为UTF-8)——问题是HTML标记,我允许使用一些基本的标记,如,当我在页面上显示它时,我在Chrome的开发工具中看到了𐃁字符

因此,我从表中删除了标签,并删除了.* 65729问题(以及在文本显示位置上方的空白行)。 我只是想补充一点,因为我的代表没有足够高的级别对答案发表评论


编辑:使用VIM,我可以使用
:set nobomb
删除BOM,您可以使用
:set bomb?
确认BOM的存在,如果您想要打印包含零宽度无中断空格字符的字符串(例如,通过包含外部非PHP文件),它将显示
bomb
nobomb

,请尝试以下代码:

echo preg_replace("/\xEF\xBB\xBF/", "", $string);

我遇到了这个问题,并在没有bom、Ansi等的情况下将编码更改为utf-8。我的问题是由于在html正文中使用了php包含函数造成的。将包含函数移到我的html上方(上方!DOCTYPE标记)解决了这个问题

在我知道我的问题后,我测试了include、include_和require函数。所有从html正文中包含文件的尝试都会产生额外的错误