在MongodB JSON样式的doc中存储HTML的好策略是什么

时间:2013-03-07 14:50:56

标签: json mongodb meteor

在MongoDB中存储HTML是否可以?有缺点吗?还有更好的选择吗?

我对JSON有点新意,但我计划将我的WordPress网站迁移到自定义的meteor / mongodb网站。

在WordPress中,我们的“帖子”基本上是产品记录,“主要内容”是产品的描述。这些描述包含一些HTML标记,例如“强”标记,中断标记和href超链接。

<p>Who hasn't wished for a mini-Roomba to handle the arduous task of cleaning their iPhone screen? Now your dreams have come true! See the Takara web page for a <a href="http://www.takaratomy.co.jp/products/automee/" title="automee s" target="_blank">demo video.</a><strong>Colors: </strong> White, Red, Orange and Blue Runs on a single AA battery.<br> 1,575 yen</p>

与XML不同,JSON缺少像CDATA这样的东西。尝试将HTML放在我的JSON样式的doc描述字段中是一个坏主意吗?这样做有特殊的逃脱角色吗?或者我应该将HTML产品描述存储为外部静态文件?还是有其他最佳做法?

{
'_id':'236',
'name':'Tokyo Marui M9A1 Gas Blow Back Airsoft Gun',
'description':'<p>html here?</p>',
'tags': ['toys','outdoors']
...
}

任何提示,建议,链接赞赏!

修改

添加了示例产品说明文字。

EDIT2

我找到了这个stackoverflow文章: How to store HTML data in MongoDB?

谷歌和另一个人 https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/HW5XB5yox20

他们似乎说应该没事。但是没有太多的讨论,所以只是寻求更多的确认。

EDIT3

额外参考 https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/0m8KJ7mPWiQ

2 个答案:

答案 0 :(得分:21)

好的,我似乎找到了足够的文章来总结:

将MongoDB中的html片段和文件存储为标准的utf-8编码字符串并提供一些注意事项非常好: http://docs.mongodb.org/manual/faq/developers/#when-should-i-use-gridfs

答案 1 :(得分:1)

您可以将其存储为String的常规文本类型,但是在保存到数据库之前先对HTML进行很好的验证。这是使用express-validatorsanitize-html

的示例
body('description').not().isEmpty().trim().isLength({ min: 3 }).customSanitizer(value => {
    return sanitizeHtml(value, {
        exclusiveFilter: (frame) => {
            return frame.tag === 'script';
        },
        textFilter: (value) => {
            return value.replace(/\\n|\s\s/g, "").trim()
        }
    })
})

这是我从描述req.body.description中从用户那里获得HTML的信息 正如您所看到的,express-validator可以验证特定规则,sanitize-html可以控制我所需的默认选项以及剥离脚本标记以及换行符和空格的内容。希望对您有所帮助。