php - 使用 NSURLSession 将带符号 (&) 的字符串从 iOS 传递到 PHP/MySQL

标签 php ios mysql swift

我正在通过 POST 将大量字符串从 iOS (Swift) 传递到我的服务器到 PHP 文件。不幸的是,如果用户在一个字段中放置一个符号 (&),则该字段的其余部分将丢失。我明白为什么(& 表示消息中的下一个字段)但我不确定如何解决。

func UploadToSql(plan: LessonPlan, isNew: Bool, callBack: ((data: NSData!, response: NSURLResponse!, error: NSError!) -> Void)?) {
    let url = NSURL(string: "https://myserver.com/receive.php")!

    var request:NSMutableURLRequest = NSMutableURLRequest(URL:url)

    var bodyData = "Author=\(plan.author)&title=\(plan.title)&grade=\(plan.grade)&date=\"\(plan.date)\"&element1=\(plan.element1)&objective1=\(convertedFields[0])&element2=\(plan.element2)&objective2=\(convertedFields[1])&element3=\(plan.element3)&objective3=\(convertedFields[2])&coreProcess1=\(plan.coreProcess1)&coreStrand1=\(plan.coreStrand1)&coreStandard1=\(plan.coreStandard1)&coreProcess2=\(plan.coreProcess2)&coreStrand2=\(plan.coreStrand2)&coreStandard2=\(plan.coreStandard2)&coreProcess3=\(plan.coreProcess3)&coreStrand3=\(plan.coreStrand3)&coreStandard3=\(plan.coreStandard3)&media1=\(plan.media1)&media2=\(plan.media2)&media3=\(plan.media3)&media4=\(plan.media4)&media5=\(plan.media5)&media6=\(plan.media6)&repertoire1=\(convertedFields[3])&repertoire2=\(convertedFields[4])&repertoire3=\(convertedFields[5])&process=\(convertedFields[6])&assessment=\(convertedFields[7])&stateCat1=\(plan.stateCat1)&stateCat2=\(plan.stateCat2)&stateCat3=\(plan.stateCat3)&stateStand1=\(plan.stateStand1)&stateStand2=\(plan.stateStand2)&stateStand3=\(plan.stateStand3)&comment=\(plan.comment)&shared=\(sharedInt!)&authorName=\(plan.authorName)" + planID

    request.HTTPMethod = "POST"

    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if error != nil {
            println("error=\(error)")
            return
        }

        println("response = \(response)")

        callBack?(data: data, response: response, error: error)
        return
    }
    task.resume()
}

最佳答案

通常对于这样的网络请求,它使用 % 后跟 ascii 十六进制值。 & 的十六进制值为 26,因此它将是 %26

google.com/#q=red%26white是谷歌搜索 red&white 的示例,它使用该替换

它称为 URL 编码或百分比编码,这是另一个关于如何进行更广泛的 URL 编码的答案的问题:stackoverflow.com/questions/24551816/swift-encode-url

请注意,您必须对插入到字符串中的每个元素进行 URL 编码,而不是对整个结果字符串进行编码,因为您希望将 & 的参数分开。

关于php - 使用 NSURLSession 将带符号 (&) 的字符串从 iOS 传递到 PHP/MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30762870/

相关文章:

javascript - 有没有办法简化 Canvas 代码

php - MySql 数据库 INSERT 操作在硬盘(本地主机)上有效,但在 Internet 上托管时无效

objective-c - 按字典值将 NSDictionary 键排序为 NSArray

用于获取 MySQL 文件名的 PHP PDO

mysql - 检查多列上的 BETWEEN 约束

ios - 在核心数据中插入对象后如何重新加载 TableView

php - 如何更改 Laravel 的 Auth 过滤器的默认重定向 URL?

php - ORDER BY RAND()函数需要很长时间才能在mysql中执行

php - 使用mysql在一列中插入多个值

如果 firebase 查询未运行,iOS 回调 (Swift Firebase)