Skip to content

Commit e0be5c3

Browse files
committed
fix url encoding
1 parent 225ab8b commit e0be5c3

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

Example/Tests/Classes/UtilitiesTest.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,11 @@ - (void)test_base64EncodedStringFromData {
7979
XCTAssertEqualObjects(base64String, expectedSring);
8080
}
8181

82+
- (void)test_urlEncodedStringFromString {
83+
XCTAssertEqualObjects([Utils urlEncodedStringFromString:@"http://www.leanplum.com"], @"http://www.leanplum.com");
84+
XCTAssertEqualObjects([Utils urlEncodedStringFromString:@"http://www.leanplum.com?q=simple_english1&test=2"], @"http://www.leanplum.com?q=simple_english1&test=2");
85+
XCTAssertEqualObjects([Utils urlEncodedStringFromString:@"https://ramsey.tfaforms.net/356302?id={}"], @"https://ramsey.tfaforms.net/356302?id=%7B%7D");
86+
XCTAssertEqualObjects([Utils urlEncodedStringFromString:@"lomotif://music/月亮"], @"lomotif://music/%E6%9C%88%E4%BA%AE");
87+
}
88+
8289
@end

Leanplum-SDK/Classes/LPMessageTemplates.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#import "LPMessageTemplates.h"
3030
#import <QuartzCore/QuartzCore.h>
3131
#import <StoreKit/StoreKit.h>
32+
#import "Utils.h"
3233

3334
#define APP_NAME (([[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]) ?: \
3435
([[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]))
@@ -323,7 +324,7 @@ - (void)defineActions
323324
withResponder:^BOOL(LPActionContext *context) {
324325
@try {
325326
dispatch_async(dispatch_get_main_queue(), ^{
326-
NSString *encodedURLString = [[context stringNamed:LPMT_ARG_URL] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
327+
NSString *encodedURLString = [Utils urlEncodedStringFromString:[context stringNamed:LPMT_ARG_URL]];
327328
NSURL *url = [NSURL URLWithString: encodedURLString];
328329
if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {
329330
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

Leanplum-SDK/Classes/Utils.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,10 @@
4747
*/
4848
+ (NSString *)base64EncodedStringFromData:(NSData *)data;
4949

50+
/**
51+
* Returns unicode encoded string for supporting international
52+
* characters in URL
53+
*/
54+
+ (NSString *)urlEncodedStringFromString:(NSString *)urlString;
55+
5056
@end

Leanplum-SDK/Classes/Utils.m

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,14 @@ + (NSString *)base64EncodedStringFromData:(NSData *)data
7171

7272
}
7373

74+
+(NSString *)urlEncodedStringFromString:(NSString *)urlString {
75+
NSString *unreserved = @":-._~/?&=";
76+
NSMutableCharacterSet *allowed = [NSMutableCharacterSet
77+
alphanumericCharacterSet];
78+
[allowed addCharactersInString:unreserved];
79+
return [urlString
80+
stringByAddingPercentEncodingWithAllowedCharacters:
81+
allowed];
82+
}
83+
7484
@end

0 commit comments

Comments
 (0)