使用php include函数时,include成功执行,但在输出include的输出之前,它还输出一个字符,该字符的十六进制值3F,我不知道它来自哪里,尽管它似乎每个包含都会发生。

起初我认为这是文件编码,但这似乎不是问题。我创建了一个测试用例来演示它:(链接不再有效) http://driveefficiently.com/testinclude.php 该文件仅包含:

<? include("include.inc"); ?>

并且 include.inc 仅包含:

<? echo ("hello, world"); ?> 

然而,输出是: “?你好世界” 哪里的?是一个具有随机值的字符。我不知道这个值的起源,有时它会搞砸我的网站。

你知道这可能来自哪里吗?起初我认为这可能与文件编码有关,但我不认为这是一个问题。

有帮助吗?

解决方案

您看到的是 UTF-8 字节顺序标记:

BOM 的 UTF-8 表示形式是字节序列 EF BB BF,在大多数不准备处理 UTF-8 的文本编辑器和 Web 浏览器中显示为 ISO-8859-1 字符 

维基百科上的字节顺序标记

PHP 不明白这些字符应该被“隐藏”,并将它们发送到浏览器,就好像它们是普通字符一样。要摆脱它们,您需要使用“适当的”文本编辑器打开文件,该编辑器允许您将文件保存为没有前导 BOM 的 UTF-8。

您可以在此处阅读有关此问题的更多信息

其他提示

您的网络服务器(或您的文本编辑器)显然包含一个 物料清单 到文档中。除非我将网站的编码明确设置为 Latin-1,否则我在浏览器中看不到流氓字符。然后,我看到两个(!)UTF-8 BOM。

/编辑:从事实来看,有 BOM 我的结论是,BOM 实际上是由您的编辑器包含在文件开头的。你用什么编辑器?如果您使用 Visual Studio,则必须在“文件”菜单中选择“另存为...”,然后选择“使用编码保存...”按钮。在那里,选择“UTF-8 without BOM”或类似的内容。

它不会显示在 Firefox 或 IE 中的渲染页面上,但当您在 ​​IE 中查看源代码时,您可以看到有趣的字符

enter image description here

这是在 Linux 机器上吗?你能用 vim 或 sed 查找并替换,看看是否可以这样去掉 3F 吗?

如果是在 Windows 上,请尝试使用记事本打开 include.inc,看看有趣的字符是否可见并可以删除。

我也很想知道如果您将代码从包含中复制出来并自行运行它会发生什么。

其实是角色3F 问号,它不只是显示为一个。

我得到了与托马斯相同的结果,没有出现问号。

从理论上讲,这可能是网络代理的一些问题,但我倾向于怀疑您的 PHP 标记中存在杂散的问号......也许您现在已经修复了,所以我们没有看到问题。

我懂了 hello, world 在您链接到的页面上。我看不出有什么问题...

我使用的是 Firefox 3.0.1 和 Windows XP。您运行什么浏览器/操作系统?也许这就是问题所在。

我也很想知道,如果您将代码复制出来并单独运行,会发生什么。

标记:这是在共享托管解决方案上,因此我无法通过 shell 访问该文件。然而,正如你所看到的 这里, ,没有不应该出现的字符,并且将同一文件作为脚本运行不会生成此字符。(共享托管公司一直没有提供任何帮助,不断告诉我这是浏览器问题)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top