zoukankan      html  css  js  c++  java
  • iOS中URL的解码和转义问题

    iOS中URL的解码和转义问题

    时间:2013-03-20 09:19来源:www.chengxuyuans.com
    在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别。
    NSString *_urlString = @"http://maps.googleapis.com/maps/api/geocode/json?address=南京&sensor=true";    
    NSURL *_url = [NSURL URLWithString:_dataString];
    NSMutableURLRequest *_request = [NSMutableURLRequest requestWithURL:_url];

    我将url字符串转码一下,也不能识别。
    转码方法一:    
    NSString * _dataString = [[NSString alloc] initWithData:[_urlString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
    转码方法二:    
    NSString * _dataString=[NSString stringWithUTF8String:[_urlString UTF8String]];

    这个问题其实是URL编码和解码问题。
    IPHONE下可以使用stringByAddingPercentEscapesUsingEncoding来编码。    
    _urlString=[_urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"Address URL: %@",_urlString);


    但是,在实际使用中,编码后的URL仍然可能会无效。因为URL的编码方式并不唯一。参见:Encode-Compare 和 URLEncoding
    NSString* escapedURLString = [unescapedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
    不同的编码方式下,有些字符不会被编码。

    所以,客户端使用什么样的编码方式应该和服务器端的解码方式配对。

    可以使用CFURLCreateStringByAddingPercentEscapes编码URL中参数部分后,再用前面stringByAddingPercentEscapesUsingEncoding编码,应该可以适应多数解码方式。

    请求的URL中,还会有很多转义符,也需要处理。

    NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)yourtext, NULL, (CFStringRef)@”!*’();:@&=+$,/?%#[]“, kCFStringEncodingUTF8);

    附上一些常用的转义处理:

    Javascript下:
    转义字符: ‘’
    $转义为$

    XML下:
    & —-> &
    < —-> &lt;
    > —-> &gt;
    ‘ —-> &apos;
    ” —-> &quot;

    SQL下(MS Access):
    # —-> ##
    ! —-> !!
    ‘ —-> ”

    在基于SOAP的HTTP服务请求时,经常需要将XML格式的请求信息转义。

    本文地址http://www.chengxuyuans.com/iPhone_IOS/53806.html

  • 相关阅读:
    UVa OJ 148 Anagram checker (回文构词检测)
    UVa OJ 134 LoglanA Logical Language (Loglan逻辑语言)
    平面内两条线段的位置关系(相交)判定与交点求解
    UVa OJ 130 Roman Roulette (罗马轮盘赌)
    UVa OJ 135 No Rectangles (没有矩形)
    混合函数继承方式构造函数
    html5基础(第一天)
    js中substr,substring,indexOf,lastIndexOf,split等的用法
    css的textindent属性实现段落第一行缩进
    普通的css普通的描边字
  • 原文地址:https://www.cnblogs.com/allen123/p/4504657.html
Copyright © 2011-2022 走看看