当“&”作为元素之一中的字符串时,Soap 消息请求不起作用,objective c

Soap message request not working when "&" as string in one of the elements, objective c

我正在尝试使用 NSURLsession 发送 soap 消息。 -(NSString *)createSoapMessage{

self.soapMessage=[NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                  "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                  "<soap:Body>"
                  "<F2 xmlns=\"website address\">"
                  "<a>%@</a>"
                  "<b>%@</b>"
                  "<c>U(GHB&@DG)</c>"
                  "</F2>"
                  "</soap:Body>"
                  "</soap:Envelope>",@"username",@"password"];
NSLog(@"%@", _soapMessage);
return self.soapMessage;}

然后使用 NSMutableURLRequest 我构建请求并使用 NSURLSession 将其作为 POST 传递。

但是,当我将“&”作为 U(GHB&@DG) 中传递的字符串的一部分时,我没有收到任何响应。 o/P 是 "DONE. Received Bytes: 0"

然而,当我传递任何其他没有“&”的字符串时,一切正常。

U(GHB@DG) 给我一个输出 DONE。接收字节数:333

我是objective C的新手,我是不是错过了什么。

我的同事在 Android 中使用同样的东西,他也用“&”正确地得到响应,所以我不认为它是服务器端的问题。

由于您正在生成请求,因此您有责任对 XML 数据进行正确编码,以便像 & 和 < 这样的特殊字符不会作为您 XML 的数据的一部分在服务器上正确解析。

因此您可以在 XML 标签的值中使用 CDATA 标签 -

<![CDATA[
   U(GHB&@DG)
 ]]>

或者您可以将所有出现的“&”替换为 &amp;&#38; 您可以使用 String 方法通过替换出现或尝试在传递之前对字符串进行编码来手动执行此操作。

提到了 XML 中特殊字符的完整列表 here