PHP XML output error: "XML declaration or text not at the beginning of the object"
I am using PHP version> 5.2 (5.2.17 on my web server and 5.3.6 on my local host) with the following settings:
output_buffering = On
output_handler = ob_gzhandler
In the following PHP script, I output an XML response for use with jQuery / AJAX
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);
But my jQuery / AJAX function does not work, and if I try to manually check the output of my PHP script, I get the following error in 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"?>
-^
And this is caused by a trailing space before the XML declaration:
" <?xml version="1.0" encoding="UTF-8" standalone="yes"?>"
I checked my PHP tags and everything is fine. Having finished my code a bit, I shared something incredible: a space is created by this function:
LanguagesManager::ValidateLanguage($Language)
public static function ValidateLanguage($Language)
{
return in_array($Language, self::GetSupportedLanguages());
}
if, "", ... , . - , ? - ?
, , :
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);