PHP Include函数输出未知字符

5
当使用php include函数时,include成功执行,但在输出include之前也会输出一个字符,该字符的十六进制值为3F,我不知道它来自哪里,尽管似乎每个include都会出现这种情况。
起初我认为这是文件编码问题,但这似乎不是问题。我创建了一个测试用例来演示它:(链接已失效)http://driveefficiently.com/testinclude.php该文件仅包含:
<? include("include.inc"); ?>

并且include.inc仅包含:

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

然而,输出结果是:"?hello, world"。其中,?是一个具有随机值的字符。我不知道这个值的来源,有时会对我的网站造成一些问题。
有任何想法,可能是什么原因导致这种情况出现?起初,我以为这可能与文件编码有关,但我认为这不是问题所在。
6个回答

11

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

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

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

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

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


3
您的网络服务器(或文本编辑器)似乎将BOM包含在文档中。我在浏览器中看不到这个恶意字符,除非我将网站编码显式设置为Latin-1。然后,我会看到两个(!)UTF-8 BOM。
/编辑:从有两个BOM的事实可以得出结论,该BOM实际上是由您的编辑器在文件开头包含的。您使用什么编辑器?如果您使用Visual Studio,则必须在“文件”菜单中选择“另存为...”,然后选择“使用编码保存...”按钮。在那里,选择“UTF-8无BOM”或类似选项。

现在有一个全局设置可以进行 - 在这里描述:https://dev59.com/vW035IYBdhLWcg3wc_wm - Rob Sedgwick

1

在Firefox或IE的渲染页面上不会显示,但是在IE的“查看源代码”中可以看到有趣的字符。

enter image description here

这在Linux机器上吗?你可以尝试使用vim或sed进行查找和替换,以便检查是否可以通过此方法去除3F。

如果是在Windows上,请尝试用记事本打开include.inc文件,看看是否可以删除奇怪的字符。

我也很好奇,如果你将代码从include中复制出来单独运行,会发生什么。


0

我在你提供的页面上看到了 hello, world。我没有发现任何问题...

我使用的是 Firefox 3.0.1 和 Windows XP 操作系统。你用的浏览器/操作系统是什么?也许那可能是问题所在。


0

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

我得到了与Thomas相同的结果,没有问号显示出来。

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


0
我也很好奇,如果你将代码从include中复制出来并单独运行它会发生什么。
马克:这是在共享托管解决方案上,所以我无法访问文件的shell。但是,正如您可以在此处看到的那样,没有不应该存在的字符,并且将同一文件作为脚本运行不会产生此字符。(共享托管公司没有提供任何帮助,不断告诉我这是浏览器问题)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接