2009-07-04 22 views
0

に変換するXMLファイルで表現する必要のあるデータがデータベースにありますが、各要求ごとにデータが異なるため、XMLファイルはPHPで生成されます。例示の目的のために、のは、これは、DB内のテキストであるとしましょう:str_replace &:&をPHPの

Hello & Goodbye

私は生成されたXMLにHello & Goodbyeとして表示するには、上記($example変数にセット)を取得するには、以下のものを使用して試してみました:

$example = mb_convert_encoding($example, "utf-8", "HTML-ENTITIES");

$example = htmlspecialchars_decode($example);

$example = html_entity_decode($example);

$example = str_replace("&", "&", $example);

これらの行は、彼らの適切な文字に、"のように、他のエンティティを交換ではなく&ます。これを正しく動作させるにはどのような考えですか?

答えて

6

&は、XMLでは無効な文字ですが、それ自体では一切許可されません。そのため、あなたが使用しているXMLライブラリはどれもそれを即座に&に翻訳している可能性が高いです。それはそうしなければならない方法です - それ以外の場合、XMLは有効ではありません。

1

あなたのコードはエンティティをデコードするように動作しますので問題はありません。

私はあなたのXML出力ライブラリがエンティティを再エスケープしていると推測しています。理解するべきことは、この正しい動作です。 XML文書では、引用符がエスケープされていない形式で表示されることがありますが(実際は属性値を除いて)、アンパサンドはほとんどすべてのコンテキストでエンティティの開始を示すため、そこには使用できません。

コードの出力を読み取るXMLパーサーは、XMLのが文字列値 "Hello & Goodbye"の表現であると認識します。

0
$example = mb_convert_encoding($example, "utf-8", "HTML-ENTITIES"); 

$example = htmlspecialchars_decode(utf8_encode($example)); 

によってが私のために働いた後、それはUTF-8 "対応" という文字列を出力します。