2009-06-25 4 views
3

PHPで不正な形式のXMLを解析する際に問題があります。特に私は、実際のデータのXMLエンティティをエンコードせずにXML形式でデータを返す第三者Webサービスにクエリしています。たとえば、要素の1つにASCIIのハート「< 3」が含まれています。引用符は使用されず、XMLパーサーは開始タグとして認識します。 '& lt; 3'にする必要があります。PHPで不正なXML(コード化されていないXMLエンティティ)を読む

今はXMLストリングをSimpleXMLElementに渡すだけで、予想通りにこれらのインスタンスで失敗します。私はいくつか探してみましたが、PHPのように思えますが、Tidyのパッケージが助けになるかもしれませんが、あなたができる設定の量は圧倒的です:(

こうして私は誰かがこのような問題と、そうであれば、彼らはそれを解決することができ

おかげ

答えて

5

tidy.repairStringがみたか:。!。

php > $tidy = new tidy(); 
php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1)); 
php > print($repaired); 
<foo>I &lt;3 Philadelphia</foo> 
php > $el = new SimpleXMLElement($repaired); 
+0

完璧、ありがとう!私はちょうどその設定オプションを試してみるのではなく、ちょっとばかげている。 – jszwedko

-1
  1. 文字列などのコンテンツを読む
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. それは、これまで私のために働いたSimpleXMLElement

で変換した文字列をロードします。

+0

これは動作しません:新しいSimpleXMLElement(htmlspecialchars(preg_replace( '/ [xx \ x8 \ xb- \ xc \ xe \ x1f] /'、 ''、 " I <3 Philadelphia" ;あなたが過ぎ去っているので、投げるでしょう。 –

関連する問題