5

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

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

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

并且 include.inc 仅包含:

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

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

关于这可能来自哪里的任何想法?起初我认为这可能与文件编码有关,但我认为这不是问题。

4

6 回答 6

11

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

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

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

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

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

于 2008-09-03T13:44:59.447 回答
3

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

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

于 2008-09-03T13:41:38.363 回答
1

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

在此处输入图像描述

这是在Linux机器上吗?你能用 vim 或 sed find & replace 看看你能不能用这种方式摆脱 3F 吗?

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

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

于 2008-09-03T13:36:34.523 回答
0

hello, world在您链接到的页面上看到。没有我看不到的问题...

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

于 2008-09-03T13:25:13.910 回答
0

字符 3F 实际上问号,它不只是显示为一个。

我得到与 Thomas 相同的结果,没有出现问号。

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

于 2008-09-03T13:30:26.813 回答
0

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

马克:这是在共享主机解决方案上,所以我无法通过 shell 访问该文件。但是,正如您在此处看到的那样,没有不应该存在的字符,并且运行与脚本相同的文件不会产生此字符。(共享托管公司一直没有帮助,不断告诉我这是浏览器问题)。

于 2008-09-03T13:45:42.283 回答