2009-08-28 21 views
1

私はthis questionに関連する問題があります。私はいくつかの名前を返すWebサービスを(またPHPを使用して)持っている。それらのうちのいずれかにスウェーデン語の文字(å、äまたはö)が含まれていて、おそらく他のものも含まれていると、私はsoapfaultを取得します(XML文書がないようです)。私は$ soapcalo - > __ getLastResponse()を使って完全な(正しいafaik)応答を見ることができます。php soapクライアントの特殊文字に関する問題

特殊文字の処理方法を教えてください。私はクライアントとサーバーの両方でエンコーディング属性(utf-8)を追加しようとしましたが、成功しませんでした。

編集:石鹸応答の抜粋:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="..."> 
<SOAP-ENV:Body> 
    <ns1:callFunctionResponse> 
    <ns1:Response> 
    <ns1:result>success</ns1:result> 
    <ns1:content> 
    <Contact> 
     <userName>VIB09SLA9EP</userName> 
     <firstName>Patrik</firstName> 
     <lastName>Stenstr&ouml;m</lastName> 
    </Contact> 
    </ns1:content> 
    </ns1:Response> 
    </ns1:callFunctionResponse> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

ありがとう!

+0

SOAP応答の最初の行を教えてもらえますか?SOAPはXMLなので、サーバーにUTF-8を適切に追加すると、応答XMLはUTF-8であることを伝えます。 XMLがISO-8859-1であるが、実際にはUTF-8が含まれていた場合、問題が発生します。 – MSalters

答えて

3

皆さん、問題は最終的に解決されました。私はここにsimilairの問題を抱えて誰かのために投稿すると思いました。判明したように、プロセスの初期段階で問題が発生しました。

DomDocumentを使用して構造を構築するSOAP応答のコンテンツが生成されました。後でsaveHTML関数で保存されました。判明したように、この関数は、クライアント上でSOAPデコードを破るいくつかのHTMLエンコーディングを追加します。

代わりにsaveXML関数を使用すると、返信が正常に完了し(タグやその他の不自然なものを追加するときも)、正しい文字列に変換されます。

私は、これはこれで終わりであると思いますが、あなたは適切な場所のチェックに役立つものを上のすべてのヘルプや+1のため:)

感謝を知っていることはありません。

/ビクター

+0

こんにちは私はあなたがこの問題をどのように解決したかがはっきりしていません。私は正確な問題に直面しています。少し詳細なコードを投稿できますか? –

+0

saveHTMLには、soapエンコーディングを壊した余分なエンコーディングが追加されました。saveXMLに変更すると、正しく処理できる「元の」エンコーディングが得られました。他の返信もチェックしてください。あなたの場合に役立つかもしれません。 – Victor

2

HTML entitiesを参考にしてください。

+0

ありがとうございます。 å、ä、öをそれぞれå äとöにエンコードすることは可能ですが、実際には必要ありません。 – Victor

+0

上記に編集:それはåなどが判明したので、エンコードは実際に最初の場所でデコードを破ったものでした!ソープするときはやめてください! :) – Victor

4

実際にはの名前が utf-8がエンコードされていることを確認しましたか? SOAP属性を設定するだけで、実際の値のエンコーディングが変更されるとは思えません。 SOAPで返す前に名前にutf8_encodeを使ってみましたか?

+0

私は今あります:) 残念ながら、それは何も違いはありませんまた、サーバー側のログ(テキストファイルへの基本)はutf-8で出てくるので、すべてが問題ないようです。ありがとう – Victor

0

SOAPサーバーはWindowsベースのサーバーですか?私はWindowsベースのサーバーやアプリケーションがUTF-8を送信しないで、代わりにcp1252を送信することに気づいた。

私は特別な文字は、そのエンコーディングで下って来る持っていた1つのアプリでは、私はちょうど私のHTML出力に次のコードを実行します:

<?php 
print htmlentities($string, ENT_COMPAT, 'cp1252'); 

特殊文字をHTML出力用にエンコードされたことを確認するには。

+0

私は本当にここに従ってはいけない...問題は、私は__getLastResponse()経由で返された実際のデータにしかアクセスできないということです。通常はアクセスするとSOAPエラーが発生します。 質問に答えて - はい、石鹸サーバーはWindowsマシン上で動作します。 – Victor

1

私の問題は、そのパイプの下に来ている特殊文字をUTF-8でエンコードされた「のSoapClientが正しくUTF8データをデコードしない」グーグルながら、私は最初の結果として、この質問をヒットするのでphp SoapClientはそれらを正しくデコードしていませんでした。

私のクラスがUTF-8の場合、phpファイルのエンコードを変更することで修正されました。