文件包含的意外输出

Goa*_*uy6 0 php byte-order-mark utf-8 include

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

档案A.

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

require(INCLUDE_PATH . '/pages/homepage/main.php');
?>
Run Code Online (Sandbox Code Playgroud)

文件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');
?>
Run Code Online (Sandbox Code Playgroud)

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

sha*_*mar 6

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

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

怎么做:

下载一个好的文本编辑器,如Notepad ++,并使用该转换并使用UTF-8 without BOM编码保存您的文件.

这是我的另一个答案的链接,详细说明如何使用Notepad ++安装和转换文件编码.