2008-09-03 91 views
4

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

起初我希望它是文件编码,但这似乎不成问题。我创建了一个测试案例进行论证:(链接不再工作http://driveefficiently.com/testinclude.php这个文件只包含:

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

和include.inc只包括:

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

,然而,输出是:“?你好,世界”哪里?是一个随机值的字符。这是我不知道起源的价值,它有时会让我的网站变得有点疯狂。

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

回答

11

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

的BOM的UTF-8表示是字节序列EF BB BF,这似乎为ISO-8859-1的字符。我大多数文本编辑器和浏览器都不准备处理UTF-8。

Byte Order Mark on Wikipedia

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

You can read more about this problem here

0

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

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

0

字符3F其实的问号,它不仅仅是一体显示。

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

理论上它可能会有一些问题,网络代理,但我倾向于在你的PHP标记......这或许你现在固定,所以我们看不到的问题,怀疑流浪问号。

1

它不会出现在Firefox或IE浏览器所呈现的页面上,但你可以看到有趣的人物,当你查看源代码在IE

enter image description here

这是一台Linux机器上?你可以找到&用vim或sed来替换,看看你能否以这种方式摆脱3F?

如果它在Windows上,请尝试使用记事本打开include.inc以查看滑稽字符是否可见&可以被删除。

我也很想知道如果你将代码复制到include之外并且只是单独运行它会发生什么。

3

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

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

+0

您现在可以创建一个全局设置 - 在这里描述:https://stackoverflow.com/questions/5406172/utf-8-without-bom – 2016-05-01 20:47:59

0

我也很好奇,看看你的代码复制出来的 的包括,只是通过自身运行什么 发生。

马克:这是在一个共享的托管解决方案,所以我无法获得shell访问该文件。然而,正如你可以看到here,没有不应该在那里的字符,并且运行与脚本相同的文件不会产生这个字符。 (该共享托管公司已获得0帮助,不断告诉我这是一个浏览器问题)。