我正在开发一个项目,我希望将原始的svg数据存储在我的mongodb中。现在,它看起来有点傻,因为我需要像这样转义svg字符串:
{ "_id" : ObjectId("4c61e60d4d02da615f175b6e"), "name" : "Triangle", "svg-data" : "<?xml version=\"1.0\" encoding=\"utf-8\"?> <!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) --> <!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"> <svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"63.781px\" height=\"85.042px\" ... bunch of data elided here ... </svg>" }
这有点可以接受,但是一旦json从服务器传回来,我可能需要解除转义(这是一个字吗?)或在客户端解码。
我很好奇是否有其他人这样做(我在谷歌或堆栈溢出时找不到任何示例)和/或是否有关于最佳方法的任何建议(或更好的方法来做到这一点) )。
答案 0 :(得分:1)
我个人尚未在MongoDB中存储文件,但according to mongodb.org将文件存储在数据库中非常有效。在数据库中存储文件具有以下优势:
现在,似乎阻碍你的事情是逃避数据。但是,如果手动在MongoDB shell中键入语句,则只需要转义SVG数据。如果您使用driver与数据库进行交互,驱动程序将负责转发数据中的特殊字符。当您读出代码中的数据时,驱动程序也会为您取消数据。
在MongoDB shell中演示的示例:
var myObject = { "myKey": "Data with \"special\" characters." }
print(myObject.myKey)
在第一行中我必须转义引号,因为我手动输入语句。如果您从代码与数据库交互,MongoDB驱动程序将为您执行此操作。
print()
语句会自动取消数据,因此输出将为:
带有“特殊”字符的数据。
数据库驱动程序也会自动转换字符串。如果您将JSON对象发送到客户端的浏览器并使用JavaScript读取值,浏览器也将取消数据。
当您手动准备要插入的数据时,将必须转义特殊字符,无法绕过它。但是只要您从代码中与数据库进行交互,数据库驱动程序就会处理这个问题,您不必担心它。