如何避免在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结果,请执行以下操作:
- 将文件重命名为filename.bom.bak.php
- 在你的编辑器中打开文件并复制剪贴板中的内容。
- 创build一个新文件并粘贴剪贴板中的内容。
- 用原名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?
这将显示bomb
或nobomb
我有这个问题,改变我的编码为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
之前的文档开始处的一个空白区域