$_POST[]在iOS客户端中丢失了符号字符串


$_POST[ ] has lost symbol string in iOS Client.

我的客户端通过Post发送到"abc+def",然后再次从服务器获取字符串
但是返回字符串是"abcdef"。为什么?如何保持abc+def?

-iOS客户端-

NSError * error=nil;
NSString * str=[NSString stringWithFormat:@"selected_card=@"abc+def"];
NSData * postData= [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *myString = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding];
NSLog(@"myString=%@",myString);
[req setHTTPMethod:@"POST"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[req setHTTPBody:postData];
NSHTTPURLResponse * response=nil;

NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];
if(data!=nil)
{
    NSLog(@"error:%@",error);
    NSDictionary * cardDictionary= [NSJSONSerialization JSONObjectWithData:data
                                                                   options:NSJSONReadingMutableLeaves
                                                                     error:&error];
    NSLog(@"return string:%@",[cardDictionary objectForKey:@"card1"]);
}

-服务器

...
$user_table = $_POST['id']."_card";
$select_card_drawing_url=$_POST['selected_card'];
$response=array("card1" => $select_card_drawing_url);
echo json_encode($response);
return ;
?>

-客户端日志-

MyString=abc+def
return String: abc def

您以application/x-www-form-urlencoded格式发布数据。在这种格式中,加号(+)具有特殊的挖掘功能:它对空白进行编码。要获得预期结果,必须将+编码为%2b:

NSString * str=[NSString stringWithFormat:@"selected_card=@"abc%2bdef"];

您必须对此格式传递的每个参数值进行编码(它遵循与URL中的参数相同的编码规则)。有关iOS中URL编码的更多信息:如何对字符串进行URL编码