新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串

Posted

技术标签:

【中文标题】新行命令 (\\n) 不适用于 Firebase Firestore 数据库字符串【英文标题】:New Line Command (\n) Not Working With Firebase Firestore Database Strings新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串 【发布时间】:2018-07-23 04:05:12 【问题描述】:

我正在使用 Swift 制作应用程序,并且正在使用 Firebase Firestore。 Firestore 是一个数据库,其中包含一些我放入UILabel 的字符串。对于我的一些字符串,我正在使用新行命令(或\n)。所以我的一些字符串看起来像这样:

"This is line one\nThis is line two\nThis is line three"

但是,每当检索到该字符串时,它都会添加到 UILabel 中,并且看起来像这样......

这是第一行\n这是第二行\n这是第三行

...什么时候应该是这样的...

这是第一行

这是第二行

这是第三行

我假设\n 不适用于来自数据库的字符串?我尝试过使用\\n 进行双重转义。有没有人解决这个问题?

这是我正在使用的代码...

    database.collection("songs").whereField("storyTitle", isEqualTo: "This is the story header").getDocuments  (snapshot, error) in
        
        for document in (snapshot?.documents)! 
            self.storyBodyLabel.text = (document.data()["storyBody"] as? String)!
   

【问题讨论】:

您是否尝试过双重转义(例如\\n)? @l'L'l 是的,我有。 Doug 回答:Firebase 数据库不会以任何方式修改您的字符串。如果你存储了一个\n,当你读回它时它就会在那里。但是,如果这没有转化为您的 UILabel 中的换行符,那么该问题可能会出现在代码的后面。如果您 create an MCVE 提供帮助会容易得多,其中包含 1) 保存字符串,2) 加载字符串,3) 将字符串设置为 UILabel代码。跨度> @FrankvanPuffelen 好的。刚刚更新了我的问题。该字符串已经在数据库中,所以没有保存过程。 是的,您将文字字符“\n”放在那里。它不像那样工作 - 请参阅我的答案。 【参考方案1】:

我明白了。我只是用换行命令替换了我收到的字符串中的字符“\n”。

label.text = stringRecived.replacingOccurrences(of: "\n", with: "\n")

因为我手动输入了我的字符串并给 Firebase 一个类似 "Line one\nline two\nline three" 我将 "\n" 替换为 "\n" 但是如果你给 Firebase 一个类似的字符串

"Line one
Line two
Line three"

Firebase 将这些返回替换为 "\\n" 然后编写代码

label.text = stringRecived.replacingOccurrences(of: "\\n", with: "\n")

希望有帮助!

【讨论】:

您确定要替换\n吗? Firebase 将 \n 转换为 \\n 因此您需要使用 stringRecived.replacingOccurrences(of: "\\n", with: "\n") 转换回来 Rufat Mirza 有这个问题的正确答案!感谢您的评论 感谢您的回答!现在命令是 stringRecived.replaceAll(RegExp(r'\\n'), '\n')【参考方案2】:

Firestore 不支持字符串值中的任何转义序列。如果你在一个字符串中写“\n”,当你阅读它时,你会得到完全正确的结果。如果您需要存储一些特殊的东西,您可能需要自己编码和解码。

【讨论】:

您的意思是“Firebase 实时数据库不支持换行符 [和其他一些字符]”?数据库存储和字符串文字是不同的问题。 不,您可以在 Firestore 中放置您想要的任何字符。我最近什至在里面放了表情符号。您只是不能指望 Firestore 能够理解任何可能在编程语言中有意义的字符转义序列。 twitter.com/CodingDoug/status/961302822997213184 @DougStevenson 对不起。我对编码很陌生。我该怎么做? 这听起来像是在 Stack Overflow 上提出的另一个问题。 @DougStevenson 好的。我去看看有没有人问过。我确定他们有。谢谢你的帮助! ??【参考方案3】:

尝试了所有建议的答案,但没有一个对我有用。最后,我在 Firestore 记录中使用 "/n" 修复了它,并在 Swift 客户端中使用了以下内容:

label.text = stringReceived.replacingOccurrences(of: "/n", with: "\n")

【讨论】:

【参考方案4】:

您可以为\n 使用 CSS 空白属性,它适用于我。

white-space: pre-line;

【讨论】:

【参考方案5】:

解决方案:将其添加到您的字符串中即可完成(对于 Java 用户):

.replace("\\n", "\n")

示例:

    if (dataSnapshot.exists())
    
    ArrayList<String> userlogs2 = new ArrayList<String>();
    userlogs2.add(dataSnapshot.getValue().toString().replace("\\n", "\n"));
    
    Iterator<String> it2 = userlogs2.iterator();
    

    while (it2.hasNext()) 
    
    appendColoredText(userlogsmessages2, it2.next() + "\n", Color.BLACK);
    
    appendUnderlinedText(userlogsmessages2,"____________" + "\n\n", Color.parseColor("#DB808080"));
    
                                    

【讨论】:

【参考方案6】:

对我来说,firebase 把所有的 \n 都变成了 \\\\n ,所以我只是用 :

扭转了这个变化
theString.replaceAll( "\\\\n", "\n" );

刚刚发布是因为我浪费了一些时间来计算正确的“\”数量

【讨论】:

【参考方案7】:

Firestore 添加此类型----第一行\n第二行\n第三行

获取 Sting,用 TextView 替换和显示

String sura=modellist.get(position).getSura().replace("\n", "\n");

工作..

【讨论】:

【参考方案8】:

我发现我可以使用 String.fromCharCode() 函数将换行符放入 firestore 字段。 Firestore 似乎需要字符串中的特殊字符才能成为实际的字符 ASCII 值,并且不会重新解释转义字符。

"第一行" + String.fromCharCode(13) + "第二行"

【讨论】:

【参考方案9】:

100% 正常工作

DB.collection(Global.DB_COLLECTION_PATH).document(NEWS_ID).get().addOnCompleteListener(new OnCompleteListener< DocumentSnapshot >() 
    @Override
    public void onComplete(@NonNull Task< DocumentSnapshot > task) 
        if (task.isSuccessful()) 
            body1 = task.getResult().getString("newsBody").replace("\n", "\n");
            nBody.setText(body1);
        
    
).addOnFailureListener(new OnFailureListener() 
    @Override
    public void onFailure(@NonNull Exception e) 
        Log.e("DB FAILED", e.getMessage());
    
);

希望对你有用

【讨论】:

以上是关于新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 存储上传适用于模拟器,但不适用于 iPhone

新行分隔符不适用于 group_concat 函数

Firebase 动态链接不适用于发布版本

ios UIApplicationOpenURLOptionsKey 不适用于 Firebase

Firebase 推送通知不适用于试飞

为啥这些 Firestore 规则不适用于 Flutter Firebase 插件?