如何清理用户输入文本以便可以在Javascript / JSON中使用?

时间:2013-01-02 16:45:55

标签: javascript json

我有一个网络应用程序,我允许使用文本字段输入一些大文本。此文本将保存到数据库中,然后将其作为JSON响应中的字段发送回用户。在浏览器中,我尝试使用Object将其简单地转换为JSON.parse,但这有时会失败,具体取决于用户在字段中放置的内容。

我认为现在,文本中有单引号,而且在我可以在其上调用JSON.parse之前打破了浏览器端的Javascript。

清理这些数据的最佳方法是什么?理想情况下,我可以在保存后将其解析回Object并进行最少的清理?

2 个答案:

答案 0 :(得分:4)

这不是一个清理问题:你可以很好地在JSON中放一个带引号的字符串:编码只是逃避它们。

您的问题是编码问题。要在浏览器中构建JSON字符串,请使用JSON.stringify。要在服务器端执行此操作,您应该使用(未经说明的)服务器端语言/框架提供的工具。

答案 1 :(得分:2)

JSON令人敬畏的是你不需要清理任何东西。无论您向JSON编码器提供什么 - 它总是输出普通的JSON。显然,如果您计划在HTML页面中使用JSON,则需要对其进行HTML编码。根据JS编码器需要确保其中没有</script>(例如,将/替换为\/)。

您也不需要JSON.parse。 JSON是JavaScript的一个子集,因此您可以执行类似的操作(简单来说就是PHP-ish):

<script>
    var obj = <?= json_encode($whatever) ?>;
</script>

如果你真的想要包含JSON,那么请考虑不要这样做。你可以只拥有对象本身 - 不需要在JSON数据中包含JSON 字符串。但是如果你有这个,那么它也应该始终有效。