`
jsntghf
  • 浏览: 2533893 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

URL转码

    博客分类:
  • iOS
阅读更多

 NSString+URLEscapes.h

 

@interface NSString (URLEscapes)

- (NSString *)escapedURLString;
- (NSString *)originalURLString;

@end

 

 NSString+URLEscapes.m 

 

#import "NSString+URLEscapes.h"

#define UE_DEBUG    0

int HexCharToInt(const char c) {
    if (c >= '0' && c <= '9') {
        return (c - '0');
    } else if (c >= 'a' && c <= 'f') {
        return (c - 'a' + 10);
    } else if (c >= 'A' && c <= 'F') {
        return (c - 'A' + 10);
    } else {
        return 0;
    }
}

int HexStringToInt(const char *hex) {
    int ret = 0;
    
    if (NULL != hex) {
        int base = 1;
        int ind = strlen(hex) - 1;
        
        while (ind >= 0) {
            ret += base * HexCharToInt(hex[ind--]);
            base *= 0x10;
        }
    }
    
#if UE_DEBUG
    NSLog(@"HexStringToInt: %s -> %d", hex, ret);
#endif
    return ret;
}

@implementation NSString (URLEscapes)

- (NSString *)escapedURLString {
    NSString *ret = self;
    char *src = (char *)[self UTF8String];
    
    if (NULL != src) {
        NSMutableString *tmp = [NSMutableString string];
        int ind = 0;
        
        while (ind < strlen(src)) {
            if (src[ind] < 0
                || (' ' == src[ind]
                    || ':' == src[ind]
                    || '/' == src[ind]
                    || '%' == src[ind]
                    || '#' == src[ind]
                    || ';' == src[ind]
                    || '@' == src[ind]))
            {
#if UE_DEBUG
                NSLog(@"escapedURLString: src[%d] = %d", ind, src[ind]);
#endif
                [tmp appendFormat:@"%%%X", (unsigned char)src[ind++]];
            } else {
                [tmp appendFormat:@"%c", src[ind++]];
            }
        }
        
        ret = tmp;
        
#if UE_DEBUG
        NSLog(@"Escaped string = %@", tmp);
#endif
    }
    
    return ret;
}

- (NSString *)originalURLString {
    NSString *ret = self;
    
    const char *src = [self UTF8String];
    
    if (NULL != src) {
        int src_len = strlen(src);
        char *tmp = (char *)malloc(src_len + 1);
        char word[3] = {0};
        unsigned char c = 0;
        int ind = 0;
        
        bzero(tmp, src_len + 1);
        
        while (ind < src_len) {
            if ('%' == src[ind]) {
                bzero(word, 3);
                
                word[0] = src[ind + 1];
                word[1] = src[ind + 2];
                
                c = (char)HexStringToInt(word);
                
#if UE_DEBUG
                NSLog(@"originalURLString: c = %d", c);
#endif
                sprintf(tmp, "%s%c", tmp, c);
                
                ind += 3;
            } else {
                sprintf(tmp, "%s%c", tmp, src[ind++]);
            }
        }
        ret = [NSString stringWithUTF8String:tmp];
        
#if UE_DEBUG
        NSLog(@"Original string = %@", ret);
#endif
        free(tmp);
    }
    
    return ret;
}

@end

 

分享到:
评论

相关推荐

    URL转码及不能被转码的特殊字符

    ### URL转码及不能被转码的特殊字符 在互联网技术中,URL(Uniform Resource Locator,统一资源定位符)作为网页地址的重要组成部分,在传输过程中必须遵循一定的格式规范。URL转码(也称为百分号编码或Percent-...

    url转码工具,非常实用

    然而,由于URL中可能包含非ASCII字符或者特殊字符,为了能在网络传输中正确处理,URL转码成为了一项必要的操作。本压缩包提供了一个“url转码工具”,它小巧、方便且实用,无需安装,解压后即可直接使用,对于开发者...

    url转码,base64等好用转码小工具

    本资源包提供了一些实用的转码工具,包括URL转码和Unicode转码,这些都是非常重要的技术点。 URL转码(URL Encoding)是将URL中的特殊字符转换成ASCII编码的一种方法,因为URL只能包含ASCII字符集。常见的比如空格...

    url解码转码

    在Java中,可以使用`java.net.URLEncoder`类来进行URL转码。 ```java String url = "https://www.example.com:8080/path to resource?param1=value1&param2=value2"; try { String encodedUrl = URLEncoder.encode...

    URL编码转码工具

    这是一个URL编码转码工具,具体的功能和演示不发了。 实际功能是把网址转换为%hex 的形式。 1. 这个曾经是安全领域涉及到SQL注入破解屏蔽字符串的方法之一,但是现在已经很少用了 2. 这曾经是入侵大型网站(特别是...

    Delphi url 编码及转码及特殊字符串替换--百度和腾讯用的就是这个.mht

    Delphi url 编码及转码及特殊字符串替换--百度和腾讯用的就是这个.mht

    JSP中js传递和解析URL参数以及中文转码和解码问题

    1.传递参数: 代码如下: var pmt = ‘sensor=’+ encodeURI(encodeURI(sensor))+’&device=’+encodeURI(encodeURI(device))+’&instrument=’;...接收和解析参数 代码如下: //获取URL参数 function GetRequest()

    PB 进制转换 url编码 urlencode urldecode 数组排序

    自己写的,可能有bug,请大家一块学习 环境为PB12 函数(及参数) 作用 arraysort 对一维数组进行排序 ...urldecode 将指定字符串以进行指定字符集url解码 urlencode 将指定字符串以进行指定字符集url编码 涨价了,哈哈

    JS实现URL编码转换中文

    ### JS实现URL编码转换中文 在Web开发过程中,经常需要处理URL中的特殊字符,特别是中文字符。由于URL传输限制及浏览器解析原因,中文等非ASCII字符需要被编码为特定格式才能在网络上传输。本文将详细介绍如何使用...

    URL转码_1_0-190610083706.alp

    Android andlua androlua lua实战工程

    Unity 字符串与Url 转换扩展

    Unity 字符串与Url 转换扩展1. "".Convert2UrlStr 把"xxx" 转换为Url 编码格式的字符串"测试字符串+-——_@#$%" 就会被编码为:"%E6%B5%8B%E8%AF%95%E5%AD%97%E7%AC%A6%E4%B8%B2%2B-%E2%80%94%E2%80%94_%40%23%24%25...

    SQL转换URL

    ### SQL转换URL知识点详解 #### 一、SQL与URL转换背景介绍 在处理数据库与Web应用之间的数据交互时,经常需要将特殊字符进行编码或解码以确保它们能正确地在网络上传输。其中,URL编码(也称为百分号编码)是一种...

    剑儿txt批量转码工具

    用于批量转换txt文本文档的编码格式。如果有大量的文件,一个一个打开另存为Unicode,那是很浪费时间的。剑儿为了方便大家对大量文本文件进行转换编码。该转换器采用文件流读取写入方式,尽量保持了文件的正确无误并...

    易语言源码易语言URL编码转换模块源码.rar

    1. **URL编码**:URL(统一资源定位符)是互联网上资源的唯一地址,但某些字符在URL中可能引起问题,如空格、特殊字符等。因此,根据RFC3986标准,这些字符需要进行编码,通常使用`%`符号加两位十六进制数表示。例如...

    url特殊符号转码

    url特殊符号转码。

    URL解码与转码

    这篇博文“URL解码与转码”可能探讨了如何正确地处理URL中的编码问题,以确保数据在网络传输过程中不被破坏或误解。 URL编码是基于标准的百分号编码(%编码),它是UTF-8字符集的一部分。在URL中,某些字符如空格、...

    8UTFTP论坛转码

    - **URL转码**:URL中的特殊字符(如空格、引号等)需要使用百分号编码(%xx)进行转义。 - **隐藏信息保护**:为避免密码明文显示,可能会对FTP链接进行部分转码或隐藏。 - **格式转换**:在论坛上发布FTP链接时,...

    解决boa服务器get/post请求中文乱码问题

    - URL编码:对于GET请求,URL中的中文字符需要通过`encodeURIComponent`函数进行URL编码,服务器端再进行解码。 2. Sqlite3数据库中文乱码: Sqlite3是一个轻量级的数据库引擎,它在处理中文字符时也有类似的问题...

    URL编码转换工具 绿色版

    URL 编码转换工具,用以将 %55%52%4C%20%B1%E0%C2%EB%D7%AA%BB%BB%B9%A4%BE%DF 这样的 16 进制格式还原为 ASCII 码,并可以处理类似 %u3235 这样的 unicode 格式。

    批量文件名编码转换.7z

    这个压缩包中的主要工具是 "批量URL转码文件命名.exe",它专门针对URL编码问题,旨在解决文件名在互联网传输或在不支持特定字符集的系统中可能出现的问题。 URL编码,也称为百分号编码(% encoding),是统一资源...

Global site tag (gtag.js) - Google Analytics