2011-06-13 12 views
3

PHPバージョン5.2(私のWebサーバーでは5.2.17、ローカルホストでは5.3.6)を使用しています。PHPのXML出力エラー:「エンティティの先頭にXMLまたはテキスト宣言がありません」

私は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); 

を使用するためにXMLレスポンスを出力しています。しかし、私は手動で出力をチェックしようとした場合、私のjQueryの/ AJAX機能は、働いておらず、次のPHPスクリプトで

output_buffering = On 
output_handler = ob_gzhandler 

私の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文、または私は、単純な「真」でその機能を置き換える場合は私のコードを少しめちゃくちゃにした後、私は信じられないほどの何かをdiscoveded私はもはや解析エラーを取得しない...まあ、私はそれを信じることはできません。 誰かが私の理由を説明できますか?誰もが解決策を知っていますか?エラーが見つからなかった場合、あなたはこのように、出力バッファリングでスペースをキャッチしようとすることができ

+0

あなたはそれが 'false'をを返すと' else'部分を実行していない特定のか?また、何らかの理由で 'self :: GetSupportedLanguages()'が何か変わる可能性がありますか? (私はそうではないと思うが、それはチェックすることを傷つけない。) – Wiseguy

答えて

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); 
+1

ありがとう!それは働く...今私は問題の起源を見つけなければならない! –

関連する問題