2012-02-19 7 views
2

私はそれが正しくプットアウト xmlにphp関数を出力します。

$foo = new Database($from,$to); 
$hey = $foo->LocTo(); 
echo $hey; 

または

$foo = new Database($from,$to); 
echo $foo->LocTo(); 
関数を呼び出すとき、私は関数(クラスのデータベース内)

  function locTo(){//return the location of the to currency 
       $con = dbconnect(); //instantiate db connection 
       $locationTo= mysql_query ("SELECT location FROM Sheet1 where currency_code = '$this->to'", $con); 
       $lol = mysql_fetch_array($locationTo); 
       return $lol['location']; 
       mysql_close(); 
        } 

を持っています。

私はXMLに入れようとしていますが、エンコードエラーが発生しています。

は、これが私のXMLである

echo '<?xml version="1.0" encoding="UTF-8"?>'; 
echo '<conv>'; 
echo'<at>'.$timefrom.'</at>'; 
echo'<rate>'.$rate.'</rate>'; 
echo'<from>'; 
echo'<code>'.$from.'</code>'; 
echo'<curr>'.$currencyFrom.'</curr>'; 
echo'<loc>'.$locFrom.'</loc>'; 
echo'<amnt>'.$amount.'</amnt>'; 
echo'</from>'; 
echo'<to>'; 
echo'<code>'.$to.'</code>'; 
echo'<curr>'.$currencyTo.'</curr>'; 
echo'<loc>'.$locTo.'</loc>'; 
echo'<amnt>'.$convertedAmount.'</amnt>'; 
echo'</to>'; 
echo'</conv>'; 
私はエンコードのエラーを取得していますなぜ

は誰もが知っていますか?私はソースコードをチェックし、それは場所まで取得します。

ここに出力する場所の例を示します。

AED GBP

United Arab Emirates 
United Kingdom, Crown Dependencies (the Isle of Man and the Channel Islands), certain  British Overseas Territories (South Georgia and the South Sandwich Islands, British  Antarctic Territory and British Indian Ocean Territory) 
+0

エラーとは何ですか?さまざまな変数には、エスケープする必要があるものが含まれていますか? –

+0

header( 'Content-Type:text/xml、charset = utf-8');最初のエコーの前に – ZiTAL

+0

@ZiTALええ私は私のPHPの最上部にある – Will

答えて

2

私はあなたのコードは次のようになります(例えば)DOMへの切り替えをお勧めします。

<?php 

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->formatOutput = true; // Just for presentation, don't use this in real app 
$main = $dom->createElement('conv'); 
$dom->appendChild($main); 

// Generic attributes 
$main->appendChild($dom->createElement('at', $timefrom)); 
$main->appendChild($dom->createElement('rate', $rate)); 

// Fill form 
$from = $dom->createElement('from'); 
$from->appendChild($dom->createElement('code', $row['from'])); 
$from->appendChild($dom->createElement('curr', $currencyFrom)); 
$from->appendChild($dom->createElement('loc', 'time')); 
$from->appendChild($dom->createElement('amnt', 'time')); 
$main->appendChild($from); 

// Fill to 
$to = $dom->createElement('to'); 
$to->appendChild($dom->createElement('at', 'time')); 
$to->appendChild($dom->createElement('code', 'time')); 
$to->appendChild($dom->createElement('curr', 'time')); 
$to->appendChild($dom->createElement('loc', 'time')); 
$to->appendChild($dom->createElement('amnt', '<img />')); 
$main->appendChild($to); 

echo $dom->saveXML(); 

これはあなたのXMLが常に有効にする必要があります。結果は、(単なる文字列'time'で埋め)のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<conv> 
    <at>time</at> 
    <rate>time</rate> 
    <from> 
    <code>time</code> 
    <curr>time</curr> 
    <loc>time</loc> 
    <amnt>time</amnt> 
    </from> 
    <to> 
    <at>time</at> 
    <code>time</code> 
    <curr>time</curr> 
    <loc>time</loc> 
    <amnt>&lt;img /&gt;</amnt> 
    </to> 
</conv> 

は、正しく、「XMLはエスケープ」、あなたはもうそれを心配する必要はありませんが、DOMELement->noveValue = htmlを使用する場合は注意が必要だ最後<amnt />を見てみましょうAFAIKこれはあなたの価値をエスケープしません。

header('Content-Type: text/xml, charset=utf-8'); 

14.17 Content-TypeMIME types on wikiを見てみましょう:

そしてもちろんのは、正しいheader()を設定する(任意の出力を送信する前に)使用することを忘れないでください。

+0

+1それを行う非ハックの方法を示すために); – vzwick

+0

@vzwick私はかなりたくさん働いていました。大量のデータを処理しなければならず、順次データ処理が必要になります。あなたに正しいコンテンツタイプを送ってくれることを思い出させるために+1してください:) – Vyktor

+0

私はそれを試みましたが、今は「ドキュメントの最後に余分なコンテンツを取得しています」という理由が分かりますか? – Will

2

htmlspecialchars()には、任意の出力が絶対必要である前にZiTAL、header('Content-Type: text/xml, charset=utf-8')で述べたように、

また
echo '<loc>' . htmlspecialchars($locFrom) . '</loc>'; 

のように、非常におそらくあなたの友達です。

+0

私はこれを試して、それは働いていない。私はエンコーディングエラーを取得していますが、私はcharset = utf-8を使用しています:/ – Will

関連する問題