代码之家  ›  专栏  ›  技术社区  ›  Colin R. Turner

在从数据库读取时还是在写入时转义引号之类的字符更好?

  •  0
  • Colin R. Turner  · 技术社区  · 8 年前

    " < ?

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

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

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

    使用反斜杠 \ 在Perl中,我们可以在输出数据之前进行简单的regex替换,例如:

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

    我的问题是,尽管我确信永久性地改变数据以转义任何问题字符是不好的做法,但是使用如此多的服务器开销在每次从数据库读取数据时都进行常量字符替换,而这本可以只执行一次,这肯定也是不好的做法吗?你如何处理这个问题?

    2 回复  |  直到 8 年前
        1
  •  2
  •   T.J. Crowder    8 年前

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


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

        2
  •  1
  •   mentallurg    8 年前

    简而言之:存储纯文本。在读取之后,在创建JSON或XML之前,对特殊字符进行转义。