如何避免在php中回显字符65279?

Posted

技术标签:

【中文标题】如何避免在php中回显字符65279?【英文标题】:How to avoid echoing character 65279 in php? 【发布时间】: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 不存在。我很确定它是稍后添加的... 【参考方案1】:

我正在使用 PhpStorm IDE 开发 php 页面。

我遇到了这个问题,使用 IDE 的这个选项来删除任何BOM 字符并解决了问题:

File -> Remove BOM

尝试在您的 IDE 中找到类似的选项。

【讨论】:

请尽量避免在您的帖子中添加问候和称呼。他们不属于这里,因为这不是论坛。预计技术写作。谢谢。【参考方案2】:

我的解决方案是创建一个包含内容的 php 文件:

<?php
header("Content-Type:text/html;charset=utf-8");
?>

将其保存为 ANSI,然后其他 php 文件将在任何 html 或 php 代码之前要求/包含此文件

【讨论】:

【参考方案3】:

从文件中查找和删除此字符的 Linux 解决方案是使用 sed -i 's/\xEF\xBB\xBF//g' your-filename-here

【讨论】:

【参考方案4】:

当使用 atom 时,它是文档开头 &lt;?php 之前的空格

【讨论】:

感谢您的技巧,我借助代码 grep -rl $'\xEF\xBB\xBF' . 找到了文件,并且我在 &lt;?php 之前找到了相同的空白,并且成功了【参考方案5】:

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

【讨论】:

【参考方案6】:

如果您使用的是 Linux 或 Mac,这里有一个优雅的解决方案可以摆脱 PHP 中的  字符。

如果您使用 WordPress(25% 的 Internet 网站由 WordPress 提供支持),则可能是插件或活动主题由于包含 BOM 的文件而引入了 BOM 字符(可能该文件是在 Windows 中编辑的) .如果是这种情况,请转到您的 wp-content/themes/ 文件夹并运行以下命令:

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

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

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

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

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

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

【讨论】:

非常感谢@julianm,它帮助我找到了文件,是的,正如@Renoir Dos Reis 在最后一个答案中建议的那样,它是文件顶部&lt;?php 之前的一个空格。 【参考方案7】:

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

在我知道我的问题后,我测试了 include、include_once 和 require 函数。所有从 html 正文中包含文件的尝试都会在 PHP 代码开始的位置创建额外的杂项 ? 字符。

我还尝试将包含的结果分配给一个变量...即 $result = include("myfile.txt");添加了相同的额外字符

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

【讨论】:

【参考方案8】:

如果要打印包含 ZERO WIDTH NO-BREAK SPACE 字符的字符串(例如,通过包含外部非 PHP 文件),请尝试以下代码:

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

【讨论】:

【参考方案9】:

除了上述之外,我在从 mysql 数据库中提取一些数据时遇到了这个问题(字符集设置为 UTF-8) - 问题是 HTML 标签,我允许使用一些基本标签,如

和 当我在页面上显示它时,我通过 Chrome 中的开发工具查看了

以上是关于如何避免在php中回显字符65279?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中回显 .html 文件的全部内容?

如何在 PHP 中回显 XML 文件

如何在 PHP 中回显或打印数组?

如何在 PHP 中回显此 SimpleXMLElement 中的 OK 属性? [复制]

如何从数据库中回显具有特定变量的行

如何在 PHP 中回显 JSON [关闭]