2011-01-20 10 views
2

XML文書をSOAP Webサービスに送信する必要があります。テキストはhtmlエンティティが含まれているので、私は、エラーを受信して​​いたので、私はhtml_entity_decode()でテキストの文字列をきれいにしてからhtmlspecialchars()を、私はSimpleXMLオブジェクトにテキストを追加する前に、次のように:PHPを使用してXML文書の16進数のエンティティを清掃する

if(!mb_detect_encoding($string, "UTF-8") == "UTF-8") { 
    $string = utf8_encode($string); 
} 
$string = htmlspecialchars(html_entity_decode($string, ENT_COMPAT, 'UTF-8'), ENT_COMPAT, 'UTF-8'); 
$xml->addChild('PROD_DESC', $string); 

をしかし、それは名前付きエンティティをきれいものの、 ©の形式では、áのような16進数のエンティティでは何もしません。また、私が話しているサービスはそれらを受け入れません。

In this post私は可能な解決策を見つけましたが、その文字列を整頓されたcleanString関数に渡すと、同じ文字列を取得しますが、それらのエンティティにも触れません。

+2

する[phpの可能性の重複:私はUTF-8はそれを16進数表記を書き込み、書き込みしようとするたびにDOMDOCUMENTを使用します。 ](http://stackoverflow.com/questions/3575109/php-using-domdocument-whenever-i-try-to-write-utf-8-it-writes-the-hexadecimal-no) – Gordon

+1

はい、申し訳ありません、私はそれを見たことがなかった。あなたはそこで良い説明をしました。 – AJJ

答えて

2

数値エンティティがSimpleXMLをによって追加されます。

// with declared encoding : 
$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><x></x>'); 
$xml->addChild('PROD_DESC', "à"); 
// result: <PROD_DESC>à</PROD_DESC> 

// without declared encoding : 
$xml = simplexml_load_string('<?xml version="1.0"?><x></x>'); 
$xml->addChild('PROD_DESC', "à"); 
// result: <PROD_DESC>&#xE0;</PROD_DESC> 
+0

これは機能します!ありがとう。 1つだけ残っています:これらのテキストフィールドのすべての行の最後に、キャリッジリターン: を除くすべてのエンティティがなくなりました。これらのエンティティが挿入されるのはなぜですか? – AJJ

0

文字列をbase64でエンコードされたデータとして渡すことはできますか?これにより、何も取り除く必要がなくなります。あなたのXML文書が宣言されたエンコーディングを持っていないので、

関連する問題