我有一个 swift 5 应用程序,可以发布数据来更新 mysql 表。它工作得很好,只是用户注意到在描述字段中使用&符号会导致应用程序更新功能失败。
这是组件结构
import Foundation
struct Component: Codable {
var sku, qty, desc, condition: String
enum CodingKeys: String, CodingKey {
case sku = "Sku"
case qty = "Qty"
case desc = "Desc"
case condition = "Condition"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 swift 5 代码来创建 post 参数
var newCompUpload = [Component]()
newCompUpload.append(newComp)
let jsonData = try! JSONEncoder().encode(newCompUpload)
let uploadData = String(data: jsonData, encoding: .utf8)!
let defaults = UserDefaults.standard
let UserID = defaults.integer(forKey: "UserID")
let postParameters1 = "mode="+mode+"&ShipmentID="+self.ShipmentID
let postParameters2 = "&Contents="+uploadData+"&UserID=\(UserID)"
let postParameters = postParameters1 + postParameters2 // + postParameters3
request.httpBody = postParameters.data(using: String.Encoding.utf8, allowLossyConversion: false)
Run Code Online (Sandbox Code Playgroud)
下面是 request.httpBody 的示例,其中带有与号,它会破坏 json
mode=saveContents&ShipmentID=8702&Contents=[{"Qty":"1","Sku":"54657","Desc":"test & test","Condition":""}]&UserID=1437
Run Code Online (Sandbox Code Playgroud)
这看起来应该可以正常到达服务器。但事实并非如此。以下是在原始 $_POST['Contents'] 参数中将其发送到服务器的内容
[{"Qty":"1","Sku":"54657","Desc":"test
Run Code Online (Sandbox Code Playgroud)
显然,& 符号处的 json 被破坏了。我不太确定是什么破坏了它,或者我是否可以在快速交付中更改任何内容以使其正确传输
您刚刚亲身体验了 2 门编程课程:
URLComonents内置,您可以使用它来正确编码数据并将其构造为 URL,而不是手动插入字符串。| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |