如何避免在PHP中回显字符65279? (这个问题也涉及到Javascript xmlhttp.responseText(ajax))

我在这里 (和其他地方)遇到了类似的问题 – 在ajaxcallback中,我得到一个xmlhttp.responseText似乎可以(当我提醒它 – 显示正确的文本) – 但是当使用'if'语句将其与string进行比较 – 它返回false。

(我也是写这个string的服务器端代码的人) – 在仔细研究这个string之后 – 我发现string有一个“隐形字符”作为它的第一个字符。 未显示的字符。 如果我将它复制到记事本 – 然后删除第一个字符 – 它不会删除,直到再次按删除。

我为xmlhttp.responseText中的返回string做了一个charCodeAt(0)。 它返回65279

谷歌search显示它是某种UTF-8控制字符,应该设置“big-endian”或“small-endian”编码。

所以,现在我知道问题的原因 – 但是…为什么这个angular色正在呼应? 在源php我只是使用

echo 'the string'... 

它显然以某种方式输出[字符(65279)]string…

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

总结,并指定解决scheme:

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

PHP似乎没有被它所困扰 – 除非你把一个php文件包含到另一个文件中 – 那么事情就会变得混乱,string会以字符(65279)显示给他们。

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

另外,你可以用记事本中的ANSI编码保存另一个php文件 – 这也似乎工作(也就是说,如果你实际上不使用文件中的任何扩展字符,我猜…)

如果您使用的是Linux或Mac,这里是一个很好的解决scheme来摆脱PHP中的字符。

如果您使用的是WordPress(25%的互联网网站是由WordPress驱动的),那么插件或活动主题可能会由于包含物料清单(可能在Windows中编辑该文件)的文件引入了BOM字符。 如果是这种情况,请转到您的wp-content / themes /文件夹并运行以下命令:

 grep -rl $'\xEF\xBB\xBF' . 

这将search带有BOM的文件。 如果您在列表中有.php结果,请执行以下操作:

  1. 将文件重命名为filename.bom.bak.php
  2. 在你的编辑器中打开文件并复制剪贴板中的内容。
  3. 创build一个新文件并粘贴剪贴板中的内容。
  4. 用原名filename.php保存文件

如果您在本地处理这个问题,那么您最终需要将新文件重新上传到服务器。

如果运行grep命令后没有结果,并且使用的是WordPress,则检查BOM文件的另一个地方是/ wp-content / plugins文件夹。 去那里再次运行命令。 或者,您可以开始停用所有插件,然后再次激活插件时检查问题是否已解决。

如果您不使用WordPress,请转到您的项目文件夹的根目录并运行命令以查找带有BOM的文件。 如果find任何文件,则运行上述四个步骤。

您还可以通过以下方式删除javascript中的字符:

myString = myString.replace(String.fromCharCode(65279), "" );

如果要打印包含零宽度非空格字符的string(例如,通过包含外部非PHP文件),请尝试以下代码:

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

除了上面的内容,我从MySQL数据库(字符集设置为UTF-8)提取一些数据时,只是遇到了这个问题 – 问题是HTML标记,我允许一些基本的像<p>和<a>我把它显示在页面上,我通过Chrome浏览器中的开发工具获得了&#65729字符。

所以我从表格中删除了标签,并删除了&#65729问题(以及要显示文本的上方的空白行。

我只是想补充一点,因为我的代表不够高,不能评论答案。

编辑:使用VIM我能够删除BOM :set nobomb ,你可以确认存在的BOM :set bomb? 这将显示bombnobomb

我有这个问题,改变我的编码为utf-8没有bom,Ansi等没有运气。 我的问题是由在html正文中使用php包含函数引起的。 将include函数移到上面我的html(上面的!DOCTYPE标签)解决了这个问题。

我知道我的问题之后,我testing了include_once和require函数。 所有试图从html内部包含文件的地方都会在PHP代码开始的地方创build额外的杂项字符。

我也尝试将包含的结果赋值给一个variables…例如$ result = include(“myfile.txt”); 并添加相同的额外字符

请注意,将HTML移动到HTML上方不会删除显示的多余字符,但会将其从我的数据中移除,并从内容区域中移除。

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

myString = myString.substring(1)

砍掉第一个字符。

我使用“Dreamweaver CC 2015”,默认情况下,当你从文件菜单中点击“另存为”选项时,它启用了这个选项:“包括BOM签名”或类似的东西。 在这个窗口中,你可以看到“Unicode Options ..”。 您可以禁用BOM选项。 并记住要改变你所有的文件。 或者,您可以简单地转到首选项并禁用BOM选项并保存所有文件。

当使用primefaces时,它是<?php之前的文档开始处的一个空白区域