【问题标题】:Unexpected output on file include文件中的意外输出包括
【发布时间】:2010-08-30 04:06:36
【问题描述】:

我一直在使用 PHP 编写自定义 CMS,直到最近才遇到任何问题。测试时,我注意到字符串 已开始仅出现在索引页的顶部。在整个代码中使用一些 die 语句进行测试,似乎输出来自文件包含之间。

文件 A

<?php
if (!defined('IN_CMS'))
{
    exit;
}

require(INCLUDE_PATH . '/pages/homepage/main.php');
?>

文件 B(包含的文件)

<?php
if (!defined('IN_CMS'))
{
    exit;
}

$db->sql_query("SELECT * FROM `" . DB_PREFIX . "categories` active = 1");
$cats = $db->sql_results();
$categories = array();

foreach($cats as $cat)
{
    $cat_info = array(
        'name' => $cat['name'],
        'description' => $cat['description'],
        'image' => $setting['site_url'] . '/thumbnails/' . $cat['image'],
    );

    $categories[] = $cat_info;
}

include theme('index');
?>

我无法理解输出的来源,但它似乎位于两个文件之间。我在文件 A 的包含行之前添加了ob_start(),在包含文件的最开始添加了ob_end_clean(),并且没有显示输出,但是这两个文件中的任何地方都没有杂散输出。

【问题讨论】:

    标签: php utf-8 include byte-order-mark


    【解决方案1】:

    您需要使用编码UTF-8 without BOM保存文件。

    UTF-8 BOM 是一个字节序列 (EF BB BF),允许阅读器将文件识别为 UTF-8 文件。通常,BOM 用于表示编码的字节顺序,但由于 UTF-8 没有任何编码问题,因此 BOM 是不必要的。

    怎么做:

    下载像 Notepad++ 这样好的文本编辑器,然后使用该编辑器转换并使用 UTF-8 without BOM 编码保存您的文件。

    Here's a link to my other answer 详细介绍了如何使用 Notepad++ 安装和转换文件编码。

    【讨论】:

    • 谢谢。我目前正在使用 Notepad++,刚刚意识到我不小心更改了编码。
    【解决方案2】:

    可能是BOM。一些编辑器可以选择使用 BOM 进行保存。尝试将文件保存在其他编辑器中并上传,或者找到 bom 设置并禁用它。

    【讨论】:

      【解决方案3】:

      它叫做 BOM,可能是你的编辑器在保存文件时把它放在那里的。也许你应该在你的编辑器中寻找一个 UTF8 WHITHOUT BOM 选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-29
        • 2022-08-05
        • 1970-01-01
        相关资源
        最近更新 更多