0

問題が見つかりました: 応答の一部 (メッセージ本文) に「」が含まれています。これは無効な XML 文字です。それを削除する方法はありますか?

Exchange Web サービスを使用して、受信トレイから大量の電子メールを取得しています。最初の 1141 通の電子メールでは機能しましたが、1142 では失敗しています (1143 までスキップすると問題なく動作します)。メールの取得に失敗する理由はわかりませんが、取得しているエラーは次のとおりです。

Uncaught SoapFault exception: [Client] looks like we got no XML document 

1142 と 1143 の応答 XML をファイルに出力しましたが、唯一の違いは ItemId 行でした (予想どおり)。

電子メールは受信トレイに存在しますが、いくつかの奇妙な文字が含まれています (これらの奇妙な四角形の記号で表されます)。

php-ews ライブラリのわずかに変更されたバージョンを使用しています。ここに私のコードの一部があります:

<?php
$response = $ews->FindItem($Request);
$items = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->Message;

foreach ( $items as $item ) {
    $ItemRequest = new EWSType_FindItemType();

    $ItemRequest->ItemShape = new EWSType_ItemResponseShapeType();
    $ItemRequest->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
    $ItemRequest->ItemShape->BodyType = EWSType_BodyTypeResponseType::TEXT;
    $ItemRequest->ItemShape->BodyTypeSpecified = true;

    $ItemRequest->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
    $ItemRequest->ItemIds->ItemId = new EWSType_ItemIdType();
    $ItemRequest->ItemIds->ItemId->Id = $item->ItemId->Id;

    $response = $ews->GetItem( $ItemRequest ); // Code fails here
}

したがって、リクエストが失敗する理由がわかりません。オプション "exceptions" => 0、"trace" => 1 を追加してみましたが、__last_response DOES に期待どおりの応答が含まれていることがわかります。正しい応答が返ってきたのに、不思議なことに失敗したのはなぜですか?

4

1 に答える 1

2

SoapClientクラスを拡張し、XMLメッセージから無効な文字を削除する__doRequestメソッドを実装することで、この問題を修正しました。

于 2012-05-09T13:19:37.353 に答える