从数据库或写入时读取引号等字符是否更好?

时间:2018-06-02 14:12:51

标签: json database escaping substitution

我找不到关于这个主题的好答案,但它必须是一个常见的问题。现在许多应用程序只是从数据库中提取数据并将JSON或XML直接输出到外部客户端。那么在这个过程的哪个阶段最好逃避问题字符,如"<

如果您在JSON中输出名称Dwayne“The Rock”Johnson,您将获得:

{"name":"Dwayne "The Rock" Johnson"} //breaks

..这将破坏JSON,您的应用程序将崩溃,因此需要输出为:

{"name":"Dwayne \"The Rock\" Johnson"} //ok

使用反斜杠\来转义引号。 在Perl中,我们可以在输出数据之前进行简单的正则表达式替换,例如:

$name =~ s/"/\\"/g; #replaces " with \"

我的问题是,虽然我确定永久改变你的数据以逃避任何问题字符是不好的做法,但是当使用如此多的服务器开销来对数据库的每次读取进行常量字符替换时,这当然也是不好的做法。只做了一次?你如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

序列化时转义值,而不是保存时。你永远不知道你需要序列化的格式;不同的格式会有不同的逃避要求。

另外:不要手动创建JSON。使用序列化程序(将为您处理报价)。

答案 1 :(得分:1)

你的意思是你在数据库中存储了以后需要表示为JSON或XML的对象的单独属性的值吗?如果是,则更好的方法是存储原始普通值,并仅在生成JSON或XML时进行转义。否则,它将破坏或基本上使搜索和索引等其他操作复杂化。此外,如果您的后续格式不需要转义(如HTML),则需要删除转义。

简要说明:存储纯文本。在创建JSON或XML之前,请先阅读特殊字符。