首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于iPhone上URL的NSString字符无效的问题

这个问题涉及到iOS开发中的URL编码问题。在iOS开发中,当需要在URL中传递包含特殊字符的参数时,需要对这些特殊字符进行编码。这是因为某些字符在URL中具有特殊含义,例如空格、引号等。

在iOS开发中,可以使用NSString类中的stringByAddingPercentEncodingWithAllowedCharacters:方法对字符串进行编码。该方法接受一个NSCharacterSet参数,该参数指定哪些字符需要进行编码。例如,如果需要对URL中的空格进行编码,可以使用以下代码:

代码语言:txt
复制
NSString *urlString = @"https://www.example.com/?query=hello world";
NSString *encodedUrlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

在上面的代码中,[NSCharacterSet URLQueryAllowedCharacterSet]表示允许在URL查询参数中出现的字符集,这个字符集包含了字母、数字、标点符号等常用字符。stringByAddingPercentEncodingWithAllowedCharacters:方法会将URL中不在允许字符集中的字符进行编码,例如将空格编码为%20

需要注意的是,在对URL进行编码时,需要对整个URL字符串进行编码,而不是只对参数值进行编码。例如,以下代码是错误的:

代码语言:txt
复制
NSString *urlString = @"https://www.example.com/?query=hello world";
NSString *encodedUrlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];

在上面的代码中,[NSCharacterSet URLHostAllowedCharacterSet]表示允许在URL主机名中出现的字符集,这个字符集不包含空格。但是,这个字符集包含了字母、数字、标点符号等常用字符。因此,该代码只对URL中的空格进行编码,而不是对整个URL字符串进行编码。这样会导致URL解析错误。

总之,在iOS开发中,如果需要在URL中传递包含特殊字符的参数,需要对整个URL字符串进行编码,并使用正确的字符集。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于url传值问题—encodeURIComponent

在以往通过url进行数据传值时,如果需要传输对象,通常我是使用JSON.stringify将键值对值通过编译为JSON字符串,之后到另一个页面,通过JSON.parse进行解析。...测试告诉我有一个订单没有回显,看看是不是报错了,之后进行排查,一看报错了,最初可能以为是超过url长度了,对比一下其他订单传值都是差不多长度,并没有多长,后面调试发现传输到下一个页面的值只有一截,问题找到了...,原因是因为前台用户输入了一个 特殊字符=(等于符号),由于等于符号本身在url传输时有着特殊作用。...为了避免这种问题再次发生,我们需要对url进行编码,需要在传输过程中对用户输入部分进行encodeURIComponent编码,之后进行decodeURIComponent进行解码。...当然使用encodeURIComponent不能解码字符字母、数字、(、)、.、!、~、*、'、-和_,其中!

1.4K41
  • 解决innerHtml 在Jquery使用无效问题

    ' + loadTime + 'ms'); innerHTML在JQuery中使用的话是无效, JQuery提供了三种方法实现指定标签赋内容:.html(),.val(),.text()。...三种方法区别具体: .html()用为读取和修改元素HTML标签 对应js中innerHTML .html()是用来读取元素HTML内容(包括其Html标签), .html()方法使用在多个元素时...对应js中innerText text()用来读取元素纯文本内容,包括其后代元素;.text()方法不能使用在表单元素 .val()用来读取或修改表单元素value值 .val()是用来读取表单元素..."value"值,.val()只能使用在表单元素 关于三者区别 .val()方法和.html()相同,如果其应用在多个元素时,只能读取第一个表单元素"value"值,但是.text()和他们不一样...,如果.text()应用在多个元素时,将会读取所有选中元素文本内容。

    41310

    Java|servlet关于url-pattern路径匹配问题

    1 前言 关于servlet路径映射有三种配置方法,通过配置xml文件中url-pattern来实现,其按优先级排序分别为:完全路径匹配、目录匹配、扩展名匹配。...相当于是把路径写死,所以其匹配是最精确,优先级也是最高。...图3.1路径匹配访问结果 4 扩展名匹配 扩展名匹配就是只匹配路径中扩展名,文件名用*代替,比如*.jsp、*.do。但是值得注意是,扩展名匹配不能与其他匹配方式混用,只能以*开头,不能 以开头。...所以像“/aaa/*.do”这种是不可用,程序会直接报错。...图4.1扩展名匹配访问结果 5 匹配优先级展示 有了三种匹配方式后,可以测试下它们优先级。

    1.5K10

    关于url刷新可能遇见几个常问题见解决办法

    1.首先需要确认你刷新个数是多少,当你刷新个数确认还是有用前提下,确认你你每次刷新个数,以及刷新频率,因为在默认条件下,每个用户每天条数为10000条,每次刷新最多为1000条,...2.当然在调用api接口时候你需要确认里面的关键参数是否有缺失或者多填写,客户在工单里反馈: 经查证是客户在调用时候由于同时在代码中进行了目录和url刷新,导致url刷新报错,不成功,就是多填写了一个关键词...FlushType,这个是在刷新目录中必须,所以导致了刷新报错。...3.在工单里客户反馈刷新时,报错在您账号下没有此域名,这个问题其实也容易出现,当时是由于客户登陆了一个自己账号,但是是给别的账号下进行url刷新操作,其实您可以直接进入控制台点击url刷新进入api...4.当然我们在官方文档上面也有一些常见报错可以给您指导,您可以耐心查看一下自己报错是不是在这些报错里面有包含,进行自我调整。

    919100

    13.1 Spring MVC 关于controller字符编码13.1 Spring MVC 关于controller字符编码问题描述原因分析

    13.1 Spring MVC 关于controller字符编码 问题描述 在使用springMVC框架构建web应用,返回http请求json格式数据,中文乱码。...原因分析 我们通常使用@ResponseBody注解使 controller回应相应数据而不是去渲染某个页面。如果请求是非英文格式字符串,往往在客户端显示是乱码。...原因是spring StringHttpMessageConverter默认字符类型是iso8895-1 ‘西欧语言’,在org.springframework.http.converter.StringHttpMessageConverter...public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); .... } 所以,我们使用中文等字符需要单独指定...produces属性: @RequestMapping(value = "/rest/create/document",produces= "text/plain;charset=UTF-8") //返回内容类型

    36710

    关于LinuxSAMBA服务权限问题(普通挂载)

    ,本地root用户有可写可读权限 但是root所创建文件所属者显示为rob(这是因为客户端用户uid映射到了samba服务端实际用户uid) 因为/mnt/smbbrian目录是用brian...用户去挂载,所以在这个目录下创建所有文件都属于brian用户(brian用户在samba服务器端用户uid是1002),但是此处所创建文件所属者却显示为rob(因为samba只识别用户uid号,...并不识别用户名;因为用户uid1002在客户端对应用户是rob,所以就显示为了rob),实际这个文件真正所属者是samba服务端用户uid为1002用户。...,也没有创建文件权限,只有读权限 综上所述: 在samba服务器端,权限由共享目录普通权限和smb.conf配置文件共同约束 samba服务认证数据在samba数据库里,而非系统用户(...用smbpasswd来管理samba用户数据) samba服务使用uid来识别用户,而非用户名 在客户端,所挂载目录权限由所挂载用户权限来决定(本地root用户除外)

    2.4K30

    字符问题初步探讨(七)----关于字符集更改内部操作

    我们又知道,通过ALTER DATABASE CHARACTER SET更改字符集虽然安全可靠,但是有严格子集和超集约束,实际我们很少能够 用到这种方法。...实际Oracle还存在另外一种更改字符方式....Oracle非公开命令: 这个命令是当你选择了使用典型方式创建了种子数据库以后,Oracle会根据你选择字符集设置,把当前种子数据库字符集更改为期望字符 集,这就是这条命令作用....在使用这个命令时,Oracle会跳过所有子集及超集检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心,你必须 清楚这一操作会带来风险....我们之前讲过内容仍然有效,你可以使用csscan扫描整个数据库,如果在转换字符集之间确认没有严重数据损坏,或者你可以使用有效 方式更改,你就可以使用这种方式进行转换.

    83820

    关于在Android 12设备安装app报错问题

    关于在Android 12设备安装app报错问题 由于某个Android项目最近需要开发新需求,在调试过程中出现错误: The application could not be installed...: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 初步判断是AndroidManifest.xml文件内容有问题,经检查和询问Google,网络上有记录引发此类问题原因有以下几种...,因为本身也是加上了这个配置。...leakcanary-android:2.5'依赖升级到 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'问题解决...END 记录一下此次解决问题过程,遇到问题不要猴急,多看报错信息,就能找到很多线索。 为了解决这次遇到问题,查询Google都浪费了不少时间。

    68910

    链表问题——两两交换链表中关于swap(p,q)无效性讨论【相邻节点】

    两两交换链表中节点 问题描述 给定一个链表,两两交换其中相邻节点,并返回交换后链表。 你不能只是单纯改变节点内部值,而是需要实际进行节点交换。...输出说明 输出格式见范例 输入范例 4 1 2 3 4 输出范例 head–>2–>1–>4–>3–>tail 题解 完整代码 问题不难,完整代码及注释如下: #include<iostream...head = createByTail(); head=Solution().swapPairs(head); displayLink(head); return 0; } 关于...swap(p,q)无效性讨论 p 、 q 为相邻节点 swap()思想出现在下面函数中, class Solution { public: ListNode* swapPairs(...到底是p、q节点内容变了,位置不变【p、q指向发生了变化】,还是内容不变,p、q位置变了【p、q节点位置发生了变化】,自嘲自己一下,交换指针我还是自己手写交换节点位置吧,交换后p、q指向再换一下,这个思路还是熟悉

    18820

    实现iOS图片等资源文件热更新化(二):自定义动态 imageNamed

    这篇文章,要解决是,使用一个自定义 imageNamed 函数来替代系统 imageNamed 函数.内部逻辑,将贯穿对比论证 关于"合适"图片定义.对iOS加载图片规则不是很熟悉童鞋,可以着重看这篇...资源把到一个bundle包中,便于保留资源目录结构,也方便整体管理与替换.iOS中bundle包,就一个一个特殊以.bunle结尾文件夹.示例中,我使用是main.bundle.另外,关于bundle...,在iPhone,正是我们需要尺寸,但是在iPad,尺寸就有些偏小了.我们在iPad,通常总是需要将此张图按照@2x图来显示.这是一个规律!...做过iPhone和iPad通用图标尺寸适配童鞋,应该早就注意到了. 所以,现在要解决关键技术问题是:如何把 @3x图,在iPad按照@2x图来解读?...相对完整代码如下,最终输出图片尺寸在iPhone为原始尺寸1/3,在iPad为原始尺寸1/2,正是我们需要: NSString * bundlePath = [[NSBundle mainBundle

    1.1K60

    关于LinuxSAMBA服务权限问题(多用户挂载)

    简介:本文探讨关于Samba服务在客户端进行多用户挂载问题,以及对cifscreds命令使用效果....安装配置: (服务器配置要求如下,配置过程在本博客中,本文省略配置过程) ?...(root环境变量已改变) 再在root用户下使用cifscreds命令把指定用户用户名和密码加入内核密钥环会不生效 8.在其他用户下使用cifscreds命令把指定用户用户名和密码加入内核密钥环...brian(rw)所对应权限 第二次使用cifscreds命令把rob(ro)用户名和密码加入内核密钥环,并没有获得rob(ro)所对应权限,此时实际权限还是第一次加入密钥环brian用户所对应权限...),第一次把指定samba用户名和密码加入到内核密钥环中即可成功,但是第二次加入内核密钥环信息会不生效(解决方法如上一条结论)

    3.2K40

    关于null通过+ ,String.ValueOf转换为字符问题!!!

    起因: 数据库里面建一个保存状态字段其vachar大小为 2,当获取其他平台 返回值为null时候 通过String.valueOf()转换为字符时候和+" " 转换字符串 出现由于字符过大保存异常..."null" : obj.toString(); } 还有的是转换方事是通过+" " 在jdk文档中+号描述是: Java 语言提供对字符串串联符号(”+”)以及将其他对象转换为字符特殊支持...字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现。...字符串转换是通过 toString 方法实现,该方法由 Object类定义,并可被 Java 中所有类继承。...有关字符串串联和转换更多信息,请参阅 Gosling、Joy 和 Steele 合著 TheJava Language Specification。

    60420

    关于SQL Server中将数值类型转换为字符问题

    今天在把一些数据导入到SQL Server时候遇到有个列被导入成float类型,而我实际需要是varchar类型,所以要进行类型转换,转换时遇到了一点问题,所以写这篇博客记录一下。...有些时候我们需要将这些数值类型转换为字符串类型,用到转换函数就是cast和convert,这两个函数作用都是进行类型转换,只不过语法格式不同。...据说在转换时还是有一定区别的,不过我个人更习惯于使用convert函数,应该这个函数一方面更像是个函数语法,另一方面在做时间和数值转换成字符串时还可以指定转换格式。...对于精确数值数据类型,转换出来字符串就是我们存储数值。...比较简单办法就是将近似数据转换为精确数据,然后再将精确数据转换成字符串。

    2.3K10

    URL Scheme

    本文转自 Migrant博客,原文:《The Complete Tutorial on iOS/iPhone Custom URL Schemes》 iPhone / iOS SDK 最酷特性之一就是应用将其自身...”绑定”到一个自定义 URL scheme ,该 scheme 用于从浏览器或其他应用中启动本应用。...iOS Custom URL Scheme 点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。...该字符串是你自定义 URL scheme 名字。建议采用反转域名方法保证该名字唯一性,比如 com.yourCompany.yourApp。...例如,假设我们使用以下 URL scheme,想传递一个名为 “token”参数和一个标识注册状态标志,我们可以像这样创建一个 URL:  NSString *customURL = @"iOSDevTips

    1.2K10
    领券