后端返回URL含有中文进行编码、解码处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后端返回URL含有中文进行编码、解码处理相关的知识,希望对你有一定的参考价值。

参考技术A 处理这个问题的初衷是:后端返回的用于跳转web页面的URL含有中文,WKWebView在加载包含中文的URL时发生了转义而无法加载只是显示空白页面。需要对包含中文的URL进行编码处理以防止发生转义。

处理方式很简单:

- (NSString*)urlEncode:(NSString*)urlString

#pragma clang diagnostic push

#pragma clang diagnostic ignored"-Wdeprecated-declarations"

    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

                                                                                                    (CFStringRef)urlString,

                                                                                                    (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",

                                                                                                    NULL,

                                                                                                    kCFStringEncodingUTF8));

    returnencodedString;

#pragma clang diagnostic pop



- (NSString*)urlDecode:(NSString*)urlString 

#pragma clang diagnostic push

#pragma clang diagnostic ignored"-Wdeprecated-declarations"

        CFStringEncoding en = CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding);

        NSString *decoded = [urlString stringByReplacingOccurrencesOfString:@"+"

                                                            withString:@" "];

        decoded = (__bridge_transferNSString*)

        CFURLCreateStringByReplacingPercentEscapesUsingEncoding(

                                                                NULL,

                                                                (__bridgeCFStringRef)decoded,

                                                                CFSTR(""),

                                                                en);

        returndecoded;

#pragma clang diagnostic pop



对需要编码处理的URL进行编码处理即可,例子如下:

NSString *urlStr = @"https://pay-zto-test.zt-express.com/cashier-static/h5/cashier?systemCode=10007&sceneCode=10025&sign=ed37f0a3a541af5aa11cd273c65f2e44&partnerOrderCode=Z1007876566test&payTypeCode=TC0036&payMethodCode=10002&recipientName=中通快递&platform=txkdg";

 NSString*encodeString = [self urlEncode:urlStr];

NSLog(@"编码encodeString===%@",encodeString);

打印结果为: https://pay-zto-test.zt-express.com/cashier-static/h5/cashier?systemCode=10007&sceneCode=10025&sign=ed37f0a3a541af5aa11cd273c65f2e44&partnerOrderCode=Z1007876566test&payTypeCode=TC0036&payMethodCode=10002&recipientName=%E4%B8%AD%E9%80%9A%E5%BF%AB%E9%80%92&platform=txkdg

需要解码回中文的话字节调用解码方法即可。

url传值含有特殊符号会被转义,怎样保证所有特殊符号都被编码?

url传值含有特殊符号会被转义,对符号进行编码,但是只能针对部分符号,怎么才能让所有符号都能正常传递呢?

参考技术A 请使用encodeURIComponent方法进行转义追问

就是使用了这个方法,但是他对双引号、单引号和&都不管用,我说的是所有符号。。。。

追答

&符号等算是url中的特殊符号,是用来进行参数传递区分的,建议你先对这些特殊符号进行编码后再进行解码,我一般用rest方式,这些都很easy

追问

关键是没有一种编码方式是针对所有特殊符号的吧,rest不懂。。。

追答

js只提供了这个两个函数,你可以看看base64编码

以上是关于后端返回URL含有中文进行编码、解码处理的主要内容,如果未能解决你的问题,请参考以下文章

JS对URL进行编码和解码

JavaScript对浏览器的URL进行编码解码

js对url进行编码解码(三种方式)

PHP解码url编码问题

url传值含有特殊符号会被转义,怎样保证所有特殊符号都被编码?

URL编码解码