NSURL 在某些情况下返回 nil

2023-12-03

我正在创建一个NSURL作为请求发送至PHP rest API我已经设置好了。下面是我的代码:

NSMutableString *url = [NSMutableString stringWithFormat:@"http://www.private.com/recievedata.php?item=%@&contact=%@&discovery=%@&summary=%@",__item,__contactDetails,__lostFound,__explain];

//The " ' " in PHP is a special character, so we have to escape it in the URL
//The two slashes are because the "\" itself is a special character in Objective C

NSString *formattedURL = [url stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];

NSURLSession *session = [NSURLSession sharedSession];
NSURL *address = [NSURL URLWithString:formattedURL];

但出于某种原因,地址变量保存nil每当我尝试使以下网址发生时:

http://www.private.com/recievedata.php?item=hell\'&contact=hell&discovery=lost&summary=hell

我必须在撇号前面添加“\”,从我的代码中可以明显看出,因为 PHP 需要在其 URL 中转义“'”。但这样做似乎违反了一些要求NSURL。你们有什么感想?


你说:

我必须在撇号前面添加“”,从我的代码中可以明显看出,因为 PHP 需要在其 URL 中转义“'”。但这样做似乎违反了 NSURL 的一些要求。你们有什么感想?

是的,在 PHP 代码中,如果您在字符串值周围使用单引号,那么您必须转义任何'出现在字符串文字中的字符。

但它是not你应该使用的情况\要逃脱的角色'您尝试在请求的 URL 中传递的值中出现的字符。 (你也不应该在一个POST要求。)

如果你想逃避这些'因为您要将这些值插入到 SQL 语句中,所以您不应该手动转义它们。相反你应该打电话mysqli_real_escape_string或显式地将值绑定到?SQL 中的占位符。切勿依赖客户端代码来转义这些值(因为您仍然容易受到 SQL 注入攻击)。

回到 URL 中保留字符的编码,这是由RFC 3986。谨慎的策略是对非保留字符集中以外的任何字符进行百分比转义。值得注意的是,如果您的价值观可能包括& or +字符,转义百分比至关重要。

因此,正确的编码'URL 查询值中的字符不是\'反而%27。不幸的是,编码stringByAddingPercentEscapesUsingEncoding is not不过,这已经足够了(因为它会让某些关键字符在值字符串中不转义)。

从历史上看,我们会使用百分比转义值CFURLCreateStringByAddingPercentEscapes (see Objective-C 中的 Urlencode). The stringByAddingPercentEncodingWithAllowedCharacters,在 Mac OS 10.9 和 iOS 7 中引入,也可以工作(请参阅https://stackoverflow.com/a/24888789/1271826有关可能的字符集的说明)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSURL 在某些情况下返回 nil 的相关文章

  • 我可以在滚动时固定表格的 tableHeaderView 位置吗?

    我有一个表视图 并在其 tableHeaderView 上附加了一个 UISegmentedControl 如何使 tableHeaderView 固定 以便即使在滚动表视图时也始终可以在同一位置查看 UISegmentedControl
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 如何改进 iOS 中的 TWTweetComposeViewController 代码?

    我已经实现了以下代码来进行 Twitter 共享 在我的代码中 我尝试测试 iOS 5 如果这不起作用 我会回到使用 ShareKit 的 Twitter 代码进行共享的旧方式 我向同事展示了代码 他建议我的代码可能有缺陷 我需要做两件事
  • 替代已弃用的 NSNibLoading 方法(loadNibFile:、loadNibNamed: 等)?

    我发现 NSBundle 中的 NSNibLoading 方法 NSBundle loadNibFile externalNameTable withZone NSBundle loadNibNamed owner NSBundle loa
  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 在 UITableviewCell 高度动画的同时动画 CALayer 阴影

    我有一个 UITableView 我正在尝试使用它来展开和折叠beginUpdates and endUpdates方法并在发生时显示阴影 在我的自定义 UITableViewCell 中 我有一个图层 我为其创建阴影layoutSubvi
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非
  • iOS:弃用 AudioSessionInitialize 和 AudioSessionSetProperty

    我对 Objective C 很陌生 正在尝试更新一些大约 3 年前的代码以与 iOS 7 一起使用 有两两个实例AudioSessionSetProperty and AudioSessionInitialize出现在代码中 1 void
  • 使用 Objective-C 在 iPhone 应用程序中显示或隐藏 UIButton

    我在用UITextView编辑文本 我想用两个UIButtons编辑并保存 最初我想显示编辑UIButton 当用户单击编辑时我想显示保存UIButton 当内容成功保存后 我不想再显示保存按钮 我是一名 C 编码员 在 C 中我曾经这样做
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • 如何从 NSString 中删除十六进制字符

    我面临一个与字符串中的某些十六进制值相关的问题 我需要从字符串中删除十六进制字符 The problem is when i print object it prints as BLANK line And in debug mode it
  • 维护 UISegmentedControl 中的选择

    我可以保持 UISegmentViewControl 段的选定状态吗 即 即使用户选择了另一个段 也可以保持一个段显示为选中状态 我似乎在任何地方都找不到任何可以做到这一点的东西 这是不可能开箱即用的 看如何才能选择 UISegmented
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • 检测 UITableView 中的水平平移

    我正在使用 UIPanGestureRecognizer 来识别 UITableView 中的水平滑动 准确地说是在单元格上 尽管它已添加到表格本身 然而 这个手势识别器显然窃取了桌子上的触摸 我已经让 pangesturerecogniz
  • 在 Objective-C 中获取对象的属性数组

    Objective C 中是否可以获取对象所有属性的数组 基本上 我想做的是这样的 void save NSArray propertyArray self propertyNames for NSString propertyName i
  • 防止 UITableView 滚动到某个点以下

    如何让 UITableView 允许在某个索引行上方滚动 但在低于某个点时阻止滚动 例如 如果我有第 1 行到第 100 行 其中在给定时间视图中仅出现 5 行 我希望允许用户在第 1 50 行之间滚动 但在第 50 行可见时阻止进一步向下
  • 如何确定 UINavigationController 中工具栏的高度?

    我有一个带有由 UINavigationController 呈现的工具栏的视图 当我处理 UIKeyboardWillShowNotification 时 我将整个屏幕向上滚动键盘的高度 问题是当显示键盘时 底部工具栏不显示 所以我只需将
  • Parse 在哪里存储用户会话

    登录代码 PFUser logInWithUsernameInBackground self userTextField text password self passwordTextField text block PFUser user

随机推荐

  • 更改存储在基于哈希的集合中的对象的哈希代码

    我有一个基于哈希的对象集合 例如HashSet or HashMap 实施过程中会遇到哪些问题hashCode 因为它是根据一些可变字段计算的 所以它可以随着时间而变化 它如何影响休眠 有什么理由让hashCode 默认返回对象的ID是坏的
  • 如何将类及其成员函数分离到头文件和源文件中

    我对如何将简单类的实现和声明代码分离到新的头文件和 cpp 文件中感到困惑 例如 我如何分离以下类的代码 class A2DD private int gx int gy public A2DD int x int y gx x gy y
  • gitlab:调用 gitlab-shell

    我一直在浏览代码gitlab shell 我无法理解它是如何被调用的 如果我对我的服务器 安装了 gitlab shell 进行了拉取 那么 gitlab shell 如何知道它 bin gitlab shell有这一行作为评论 GitLa
  • 事件源的性能

    我目前正在开发一个大型项目 需要实现服务器发送的事件 我决定使用事件源传输 并从简单的聊天开始 目前客户端仅监听新的聊天消息事件 但项目将来会有更多事件 首先 我真的很关心服务器端脚本及其循环 其次 我不确定使用mySQL数据库作为存储 在
  • 如何提取 MongoError: E11000 找到重复键的错误消息?

    如何提取错误消息MongoError E11000发现重复的钥匙 我只想要错误本身消息而不是整个对象 我将用一个例子来解释这一点 在mongo shell db test insertOne id 1 insert a document t
  • 在过去 365 天窗口中执行运行总计的有效方法

    这就是我的数据框的样子 库 数据 表 df lt fread Name EventType Date SalesAmount RunningTotal Runningtotal prior365Days John Email 1 1 201
  • 仅第一次记录显示,除非强制处置

    我正在使用 vs 2017 写一个netcoreapp2 0库 并使用 UnitTest 项目对其进行测试 XUnit 和 NUnit 给出相同的结果 我注意到除非我强行处置我的Serilog记录器 只有第一行会出现在Seq 这是我的两堂课
  • AWS 负载均衡器后面使用 Traefik 进行 HTTPS 重定向

    我正在尝试将所有传入的 Traefik 从 http 重定向到 https 以便从具有自定义端口的 docker 容器提供服务的 Web 应用程序 如果我构建这个 docker compose 文件 并扩展应用程序 一切都会按预期工作 我能
  • Ember Simple Auth 自定义验证器

    我一直在尝试创建一个session currentUser财产与id email and points特性 我正在参考使用 Ember 简单身份验证 Ember CLI 的自定义身份验证器 and 如何在会话中存储用户 但我就是不明白这些部
  • 使用 std::ranges::min 投影在 std::map 上

    是否可以在 std map 上投影 我尝试将 std ranges min 与投影一起使用 但它似乎会抛出错误 我无法解释为什么它不喜欢东西 include
  • 可以在自定义进度条progressDrawable中做圆角吗?

    I have a progress bar that is supposed to look like the attached image And I ve made it a long way I m very close the on
  • jMockit:如何期望构造函数调用模拟对象?

    我正在对执行一些序列化操作的方法进行单元测试 我打算模拟序列化逻辑 代码如下 ObjectInputStream ois new ObjectInputStream new BufferedInputStream new FileInput
  • 移植到 VS2015 / .NET 4.6 后,C++/CLI DLL 在加载时崩溃

    老实说 这可能是一个骗局VS2015 迁移的项目可以编译 但无法运行 调试断言失败 但这没有答案 我有更多细节 最近将我们的代码库从针对 v4 0 的 VS2010 移植到针对 v4 6 的 VS2015 我们有一个托管 C DLL 来提供
  • 更改模块目录后的 Python pickle

    我最近更改了程序的目录布局 之前 我将所有模块都放在 main 文件夹中 现在 我已将它们移动到以程序命名的目录中 并放置了一个 init py在那里制作一个包裹 现在 我的主目录中有一个 py 文件 用于启动我的程序 这更加简洁 不管怎样
  • Log4j2 不同级别的不同appender

    我有一个小问题 找不到解决方案 我想为级别信息而不是级别警告设置图案布局 如果我的登录级别为INFO 则一切正常 但如果日志级别为INFOWARN它被写入控制台两次 作为级别信息和级别警告 简而言之 特定级别的所有日志都会写出该级别及其下级
  • yii2 当超链接不在pjax中时如何使用pjax

    在 yii2 中使用 pjax 就像 h1 Current time h1 但如果超链接不在 就像
  • 如何处理 SharePoint 异常?

    我是 SharePoint 新手 所以我想我需要如何处理异常 当我编写自定义代码时 我是否必须检查它们 或者如果抛出它们 它们会自动记录并且不会破坏应用程序 如果没有 那么我如何记录它们 谢谢你 编辑 我应该如何记录这些异常 使用它写入日志
  • C++ 唯一静态 ID 和类名以及基类

    正在上课TaskBase 它的每个派生类必须有名称和唯一的id The TaskBase如下所示 class TaskBase public static const int id return an unique id for each
  • 我试图在函数触发时获取目标元素的 id,但是 `this` 关键字返回 `undefined`

    我试图在函数触发时捕获目标元素的 id 但是this关键字返回undefined HTML 文件 我无法添加任何参数onclick功能 我有很多 a 在页面中添加标签并想要识别女巫 a 标签被点击 a href some links Get
  • NSURL 在某些情况下返回 nil

    我正在创建一个NSURL作为请求发送至PHP rest API我已经设置好了 下面是我的代码 NSMutableString url NSMutableString stringWithFormat http www private com