【问题标题】:(iOS + Swift) How Do I Allow Special Characters in My Firebase Realtime Database?(iOS + Swift) 如何在 Firebase 实时数据库中允许特殊字符?
【发布时间】:2017-11-01 17:06:40
【问题描述】:

使用 iOS + Swift,在我的 Firebase 数据库键(节点名称)中允许特殊字符 .$#[]/ 的最佳方法是什么?

【问题讨论】:

  • 嗨,Trev14。我看到您还在可能的重复帖子中添加了一个答案(这很棒!),但如果问题的上下文相似,我认为发布另一个问题(只有不同​​的标签)并添加相同的答案不是好的。尽管如此,感谢您为社区做出的贡献。干杯!
  • 为什么不能在 Firebase 数据库字符串中使用这些字符? ".$#[]/" 在 Firebase 中完全是一个有效的

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

问题是

如何在我的 Firebase 实时数据库中允许特殊字符?

实际的答案是在 Firebase 实时数据库中允许使用特殊字符没有任何要求。

例如:给定以下代码

//self.ref is a reference to the Firebase Database

let str = "this.is/a#crazy[string]right$here.$[]#/"
let ref = self.ref.childByAutoId()
ref.setValue(str)

代码运行时,将以下内容写入firebase

{
  "-KlZovTc2uhQXNzDodW_" : "this.is/a#crazy[string]right$here.$[]#/"
}

如您所见,字符串与给定字符串相同,包括特殊字符。

重要的是要注意有关允许字符串中的特殊字符的问题。 Firebase 中的所有内容都存储为键:值对,值可以是字符串,所以这就是这个答案所要解决的问题。

键不一样

如果您创建自己的密钥,它们必须是 UTF-8 编码的,最多可以是 768 个字节,并且不能包含 .、$、#、[、]、/ 或 ASCII 控制字符 0-31 或 127 .

更大的问题可以追溯到;需要将这些字符作为 key 包含在内的结构可能(并且应该)重新考虑,因为通常有更好的解决方案。

【讨论】:

    【解决方案2】:

    添加百分比编码和解码!请记住允许使用字母数字字符(参见下面的示例)。

    var str = "this.is/a#crazy[string]right$here.$[]#/"
    
    if let strEncoded = str.addingPercentEncoding(withAllowedCharacters: .alphanumerics) {
        print(strEncoded)
    
        if let strDecoded = strEncoded.removingPercentEncoding {
            print(strDecoded)
        }
    }
    

    【讨论】:

    • 这是一种非常有趣的方法,但最初的问题可能应该更具体(请参阅我的回答),因为您询问的是在 Firebase Keys 中使用特殊字符而不是 字符串 - 我们不想误导可能对 Firebase 缺乏经验的未来读者。我给了你一个创造性思维的向上箭头。
    • 啊,谢谢@Jay。根据我目前的经验,每次我试图用这些字符保存一些东西时,应用程序都会崩溃......显然是因为我正在从它们创建一个键并将它们放入值中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多