我正在创建一个NSURL
作为请求发送至PHP
rest API
我已经设置好了。下面是我的代码:
NSMutableString *url = [NSMutableString stringWithFormat:@"http://www.private.com/recievedata.php?item=%@&contact=%@&discovery=%@&summary=%@",__item,__contactDetails,__lostFound,__explain];
//The " ' " in PHP is a special character, so we have to escape it in the URL
//The two slashes are because the "\" itself is a special character in Objective C
NSString *formattedURL = [url stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
NSURLSession *session = [NSURLSession sharedSession];
NSURL *address = [NSURL URLWithString:formattedURL];
但出于某种原因,地址变量保存nil
每当我尝试使以下网址发生时:
http://www.private.com/recievedata.php?item=hell\'&contact=hell&discovery=lost&summary=hell
我必须在撇号前面添加“\”,从我的代码中可以明显看出,因为 PHP 需要在其 URL 中转义“'”。但这样做似乎违反了一些要求NSURL
。你们有什么感想?
你说:
我必须在撇号前面添加“”,从我的代码中可以明显看出,因为 PHP 需要在其 URL 中转义“'”。但这样做似乎违反了 NSURL 的一些要求。你们有什么感想?
是的,在 PHP 代码中,如果您在字符串值周围使用单引号,那么您必须转义任何'
出现在字符串文字中的字符。
但它是not你应该使用的情况\
要逃脱的角色'
您尝试在请求的 URL 中传递的值中出现的字符。 (你也不应该在一个POST
要求。)
如果你想逃避这些'
因为您要将这些值插入到 SQL 语句中,所以您不应该手动转义它们。相反你应该打电话mysqli_real_escape_string或显式地将值绑定到?
SQL 中的占位符。切勿依赖客户端代码来转义这些值(因为您仍然容易受到 SQL 注入攻击)。
回到 URL 中保留字符的编码,这是由RFC 3986。谨慎的策略是对非保留字符集中以外的任何字符进行百分比转义。值得注意的是,如果您的价值观可能包括&
or +
字符,转义百分比至关重要。
因此,正确的编码'
URL 查询值中的字符不是\'
反而%27
。不幸的是,编码stringByAddingPercentEscapesUsingEncoding
is not不过,这已经足够了(因为它会让某些关键字符在值字符串中不转义)。
从历史上看,我们会使用百分比转义值CFURLCreateStringByAddingPercentEscapes
(see Objective-C 中的 Urlencode). The stringByAddingPercentEncodingWithAllowedCharacters
,在 Mac OS 10.9 和 iOS 7 中引入,也可以工作(请参阅https://stackoverflow.com/a/24888789/1271826有关可能的字符集的说明)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)