【问题标题】:Including a PHP file changes rendering in browser包含 PHP 文件会更改浏览器中的渲染
【发布时间】:2014-01-16 01:43:46
【问题描述】:

看来我在这里遗漏了一些基础知识。抱歉,如果问题可能看起来微不足道,但我正在失去理智寻找任何原因,现在几个小时都没有运气。

似乎在已包含的文件中包含多个文件会导致一些小问题 更改页面布局。 对于这个非常简单的示例,它只是将第一行移动了一点(就像添加了一个空格字符符号),但是对于我更复杂的网站,这个“缺陷”的行为就像一个换行符,它将整个网站排成一行(打破我网站的风格)。

这是一个例子。 我有超级简单的主 PHP file("include_test.php"):

<?php require ("./file.php");?>
<!doctype html>
<html>
    <head></head>
    <body>
        This is a first line of html body.<br>
        This is a second line of html body.<br>
        This is a third...<br>
    </body>
</html>

然后需要的文件——“file.php”,看起来像这样:

<?php
    require_once("file2.php"); 
    require_once("file3.php"); 
?>

然后是-file2.php 和file3.php 上面的两个必需文件。这里似乎无关紧要,因为我可以将任何内容放在那里而无需更改,但无论哪种方式,它们都是如此超级简单的 php 文件 -

file2.php:

<?php
    function alfa(){
        return 1;
    }
?>

file3.php:

<?php
    function omega(){
        return 1;
    }
?>

现在请看 main "include_test.php: here: 的输出:

http://destadesign.com/tag/include_test.php

注意到正文内容开始的轻微变化了吗? 是什么原因造成的?

注意:我已经确定删除任何“require”语句可以解决此问题。 删除 file.php "require_once("file3.php");" 的第二个 "require" 语句- 固定的。 删除 file.php "require_once("file2.php");" 的第一个 "require" 语句- 固定的。 删除 include_test.php "require("file.php"); 的 "require" 语句- 已修复。

结论(无论多么奇怪)似乎在同一个文件中的两个 require 语句(或 include - 我也检查过 - 或 include_once 或 require_once)输出一些不可见、意外和不合理的字符。 现在是正确的还是我在这里遗漏了一些明显的东西?

【问题讨论】:

  • 重要的是生成的 HTML 输出。包含和不包含这些内容会是什么样子?
  • 也不会生成 PHP 错误(包括通知),错误报告设置为 E_ALL。
  • 包括:destadesign.com/tag/include_test.php - 添加了一个空字符。在 file.php 中没有包含:destadesign.com/tag/include_test2.php - 正确的 HTML 输出。
  • 您所包含的文件之一的末尾可能有换行符。完全删除?&gt; 以避免这种情况。 (PHP 会自动将文件的结尾解释为 ?&gt;)。
  • Pekka,感谢您的帮助和参与。这很有指导意义。我已经删除了所有 php 代码结束标记(“?>”),但它并没有解决问题。我还使用 TextWrangler 工具从代码中删除了所有断行(只是为了确保绝对没有断行)。这也没有帮助。但是我确实找到了这个问题的原因和解决我的问题的方法 - 我会把它写成这个问题的答案,所以它会更清楚地为其他人阅读。

标签: php html render


【解决方案1】:

此类问题的原因不在代码中,这不涉及 html 或 php 代码中的换行符,也不涉及空格。 由于包含文件的类型,会发生这种情况。 特别是它们的编码为 UTF-8 与 BOM

当其中一个包含的文件具有 BOM 签名时,它可能会产生出乎意料且难以解释的空格或中断字符,至于为什么我不知道确切的原因(似乎它被浏览器随机处理)。所以我打开并保存了所有文件(file.php、file2.php、file3.php)为 UTF-8(没有 BOM),这解决了我的问题。

关于物料清单: http://en.wikipedia.org/wiki/Byte_order_mark

关于这个话题 - What's different between UTF-8 and UTF-8 without BOM? - 我认为这个 BOM 签名是不必要的(因为我不使用希伯来字符编码或其他异国情调的东西),并且在我的情况下是有害的。

祝所有读者有美好的一天! :) J

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多