2009-07-15 18 views
3

私のページにXML RSSを作成しています。そして、このエラーに実行している:私はXMLで& ...私は私の最後のフィールド行で行う...&をPHPでXMLに変換する

すべての私をきれいにするための最良の方法は何を持っているカントので

error on line 39 at column 46: xmlParseEntityRef: no name 

は、どうやらこれがありますPHPで$row['field']'s &年代は&

答えて

8

使用htmlspecialcharsと呼ばれていますe HTML特殊文字&,<,>,"および任意に'(第2パラメータ$quote_styleを参照)。

1

に変わるように、ちょうど目をエンコードするためにhtmlentities()html_entity_decode()

+3

XMLはHTMLと同じ* *名前のエンティティのすべてを共有しない - だけで5定義済みエンティティ(アンペア、LT、GT、QUOT、およびAPOS)を有します。 htmlentities()を使用すると、XML文書に添付されたDTDがすべてHTML名前付きエンティティを含む場合を除き、変換によってXMLパーサーがサポートする必要のないエンティティに変換される可能性があります。 –

+0

それでは、それでは何がベストですか? – ian

+0

@ian:Gumboの 'htmlspecialcharacters()'の記述があると、XMLにあらかじめ定義されたエンティティを持つ5文字にしか触れないので、それに行きます。 –

0

使用

html_entity_decode($row['field']); 

これは、あなたが&npsb;を持っている場合、それは空間にそれを変更しますまた&から取ると&に戻すだろう。

http://us.php.net/html_entity_decode

乾杯

+0

なぜ私は元に戻す必要があるのか​​分かりません...これはRSS用ですフィード。 – ian

2

は本当にPHPでのDOM XML関数になっているはずです。把握する作業が少しありますが、このような問題は避けてください。エンティティへ

+0

どうしてですか?私に何かを指さし、私はそれを理解するでしょう。 – ian

1

変換予約XML文字が

function xml_convert($str, $protect_all = FALSE) 
{ 
    $temp = '__TEMP_AMPERSANDS__'; 

    // Replace entities to temporary markers so that 
    // ampersands won't get messed up 
    $str = preg_replace("/&#(\d+);/", "$temp\\1;", $str); 

    if ($protect_all === TRUE) 
    { 
     $str = preg_replace("/&(\w+);/", "$temp\\1;", $str); 
    } 

    $str = str_replace(array("&","<",">","\"", "'", "-"), 
         array("&amp;", "&lt;", "&gt;", "&quot;", "&apos;", "&#45;"), 
         $str); 

    // Decode the temp markers back to entities 
    $str = preg_replace("/$temp(\d+);/","&#\\1;",$str); 

    if ($protect_all === TRUE) 
    { 
     $str = preg_replace("/$temp(\w+);/","&\\1;", $str); 
    } 

    return $str; 
} 
関連する問題