PHP的XML输出错误:“XML或文本声明不在实体的开头”

时间:2011-06-13 14:56:47

标签: php xml ajax

我正在使用PHP版本> 5.2(在我的网络服务器上为5.2.17,在我的本地主机上为5.3.6),具有以下设置:

output_buffering = On
output_handler = ob_gzhandler

在下面的PHP脚本中,我输出了一个用于jQuery / AJAX的XML响应

if (empty($_GET))
{
    $Response = new Response('getlanguage');
    $Response->DisplayLanguage(LanguagesManager::GetLanguage());
    die();
}

IOManager::InputSanitizeRequest($_GET);
$Language = isset($_GET['language']) ? $_GET['language'] : '';

$Response = new Response('setlanguage');

if (LanguagesManager::ValidateLanguage($Language))
{
    LanguagesManager::SetLanguage($Language);
    $Response->DisplayResult(true);
}
else
    $Response->DisplayResult(false);

但我的jQuery / AJAX函数无效,如果我尝试手动检查我的PHP脚本的输出,我在Mozilla Firefox上收到以下错误:

XML Parsing Error: XML or text declaration not at the start of entity
Address: http://127.0.0.1/responses/requestlanguage.php?language=it
Line Number 1, Column 2: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-^

这是由XML声明之前的尾随空格引起的:

" <?xml version="1.0" encoding="UTF-8" standalone="yes"?>"

我已经检查了我的PHP标签,一切都很好。在搞砸了我的代码之后,我发现了一些令人难以置信的东西:空白是由这个函数创建的:

LanguagesManager::ValidateLanguage($Language)

public static function ValidateLanguage($Language)
{
    return in_array($Language, self::GetSupportedLanguages());
}

如果我评论整个if语句,或者如果我用简单的“true”替换该函数,我就不再得到解析错误......好吧,我不能相信它。 有人能解释一下为什么吗?有人知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您没有找到错误,可以尝试使用输出缓冲捕获空间,如下所示:

ob_start();
// here the code part, which seems to print the whitespace (but nothing else)
$langValidated = LanguagesManager::ValidateLanguage($Language);
ob_end_clean();

if ($langValidated)
{
    LanguagesManager::SetLanguage($Language);
    $Response->DisplayResult(true);
}
else
    $Response->DisplayResult(false);