
PHP Include function outputting unknown charp>当使用php include函数时,include被成功执行,但是在输出include的输出之前它也输出一个char,char是十六进制值3F而且我不知道它来自哪里,虽然它似乎每个包含都会发生。 / P>
p>起初我认为它是文件编码,但这似乎不是问题。我创建了一个测试用例来演示它:(强>链接不再工作/强>)a href ="http://driveefficiently.com/testinclude.php"> http://driveefficiently.com/testinclude.php/ a>此文件仅包含:/ p> 预>代码>?包括("include.inc"); ?> p>和include.inc仅包含:/ p> 预>代码>? echo("你好,世界"); ?> 然而,输出是:em>"?hello,world"/ em>在哪里?是一个具有随机值的char。正是这个价值我不知道它的起源,它有时会搞砸我的网站。 / P> p>关于这可能来自哪里的任何想法?起初我以为它可能与文件编码有关,但我不认为这是一个问题./p> p>您所看到的是UTF-8字节顺序标记:/ p> BLOCKQUOTE> p> a href ="http://en.wikipedia.org/wiki/Byte_Order_Mark"rel ="noreferrer">维基百科上的字节顺序标记/ a> / p> p> PHP不明白这些字符应该被"隐藏"并将它们发送到浏览器,就好像它们是普通字符一样。要摆脱它们,您需要使用"正确的"文本编辑器打开文件,该编辑器允许您将文件保存为UTF-8而不使用前导BOM ./p> p> a href ="http://juicystudio.com/article/utf-byte-order-mark.php"rel ="noreferrer">你可以在这里阅读更多关于这个问题的信息/ a> / p> p>您的Web服务器(或文本编辑器)显然在文档中包含一个href ="http://en.wikipedia.org/wiki/Byte_order_mark"> BOM / a>。我没有在浏览器中看到流氓角色,除非我将网站的编码明确设置为Latin-1。然后,我看到两个(!)UTF-8 BOMs./p> p> / EDIT:由于存在em> two / em> BOM,我得出结论,编辑器实际上是在文件开头包含了BOM。你用什么编辑器?如果您使用Visual Studio,则必须在"文件"菜单中说"另存为...",然后选择"使用编码保存..."按钮。在那里,选择"没有BOM的UTF-8"或类似的东西./p> p>它没有显示在Firefox或IE中的渲染页面上,但是当您在IE / p中查看源时,您可以看到有趣的角色> p> img src ="/d/file/2023041401/3jeolfklag015.webp"alt ="在此处输入图像说明"> / p> 这是在Linux机器上吗?你能找到并用vim或sed替换,看看你是否能以这种方式摆脱3F? / P> p>如果它在Windows上,请尝试使用记事本打开include.inc以查看有趣的字符是否可见并且可以删除./p> 我也很想知道如果你从包中复制代码然后自己运行它会发生什么./p> BLOCKQUOTE> 我也很想知道什么 如果您复制代码,则会发生 包含并自行运行它./p> / BLOCKQUOTE> 马克:这是在共享托管解决方案上,所以我无法获得对该文件的shell访问权限。但是,正如你可以看到href ="http://driveefficiently.com/include.inc">这里/ a>,没有不应该存在的字符,并且运行与脚本相同的文件不会产生这个炭。 (共享托管公司一直提供帮助,不断告诉我这是一个浏览器问题)./ p> p>字符3F实际上em>是/ em>问号,它不仅仅显示为one./p> 我得到了与托马斯相同的结果,没有出现问号./p> p>从理论上讲,它可能是Web代理的一些问题,但我倾向于怀疑你的PHP标记中有一个流浪的问号......也许你现在已经修复了所以我们没有看到问题./p> p>我在你链接的页面上看到代码> hello,world / code>。没问题,我可以看到... / p> 我正在使用Firefox 3.0.1和Windows XP。你在运行什么浏览器/操作系统?也许这可能是问题./p> |