cfurlcreatestringbyaddingpercentescapes addingpercentencoding objective-c ios urldecode

addingpercentencoding - Cómo decodificar URL en iOS-Objective C



url encoding swift ios (5)

El método stringByReplacingPercentEscapesUsingEncoding no funciona correctamente ya que no está decodificando símbolos especiales que no comienzan con un carácter%, es decir, el carácter +. ¿Alguien sabe de un método mejor para hacer esto en iOS?

Esto es lo que estoy usando actualmente:

NSString *path = [@"path+with+spaces" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Y aquí hay un ejemplo de la salida:

camino + con + espacios


Si está intentando reemplazar el signo más con el porcentaje de escapes, realice un reemplazo de cadena de "+" a "" (espacio único). Luego use stringByAddingPercentEscapesUsingEncoding: para agregar el porcentaje de escapes.

El signo más es uno de los muchos caracteres URL reservados que nunca se codifican.

( stringByReplacingPercentEscapesUsingEncoding: decodifica el porcentaje de escapes)


Swift 2:

extension String { func uriDecodedString() -> String? { return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding } }


También puedes usar la biblioteca PercentEncoder de Cocoapods.

Swift 4

  • Incluye la biblioteca a tu Podfile:

    Pod PercentEncoder

  • Importar la biblioteca PercentEncoder

    importar PercentEncoder

    clase ViewController {

    ...

    }

  • Reemplace el carácter "+" por "% 20" y use el método "ped_decodeURI"

    "ruta + con + espacios" .replacingOccurrencias (de: "+", con: "% 20"). ped_decodeURI ()

Volverá "camino con espacios"

Aquí el enlace de referencia: https://cocoapods.org/pods/PercentEncoder


// Decode a percent escape encoded string. - (NSString*) decodeFromPercentEscapeString:(NSString *) string { return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef) string, CFSTR(""), kCFStringEncodingUTF8); }

http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

Esta parece ser la forma preferida porque ... "Aparentemente" se trata de un "error" que Apple conoce, pero aún no han hecho nada al respecto ... ( http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/ )


NSString *path = [[@"path+with+spaces" stringByReplacingOccurrencesOfString:@"+" withString:@" "] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Tenga en cuenta que la sustitución de más por espacio solo se usa en datos de application/x-www-form-urlencoded : la parte de la cadena de consulta de una URL o el cuerpo de una solicitud POST .