【问题标题】:PHP Include function outputting unknown charPHP包含函数输出未知字符
【发布时间】:2010-09-07 16:26:48
【问题描述】:

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

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

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

并且 include.inc 仅包含:

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

然而,输出是:"?hello, world" where the ?是一个具有随机值的字符。正是这个值,我不知道它的起源,它有时会有点搞砸我的网站。

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

【问题讨论】:

    标签: php encoding byte-order-mark


    【解决方案1】:

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

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

    Byte Order Mark on Wikipedia

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

    You can read more about this problem here

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            我也很想看看 如果您将代码复制出来,则会发生 包含并自行运行它。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-12-21
              • 2012-12-18
              • 1970-01-01
              • 2011-03-30
              • 2013-02-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多