首页 > 解决方案 > 使用 JS 转义有害字符/清理用户输入的标准方法是什么?

问题描述

在阅读了大量文章和 StackOverflow 回复后,我仍然不明白处理用户输入(textarea 和 input type="text")的行业标准方法是什么。我应该如何以及如何转义字符?应该删除/替换什么以及如何删除,以便 JSON 不会中断,尤其是当用户可以复制粘贴一些有史以来最奇怪的字符时?

我很久以前提出的可疑解决方案是:

String.prototype.escapeChars = function () {
 return this.replace(/\&/g, '&')
.replace(/\n\r?/g, '
')
.replace(/\n/g, '
')
.replace(/\r/g, '
')
.replace(/\s/g, ' ')
.replace(/\</g, '&#x3c;')
.replace(/\"/g, '&#34;')
.replace(/\'/g, '&#39;')
.replace(/\>/g, '&#x3e;')
.replace(/\\/g, '&#x27;')
.replace(/[^\x00-\x7F]/g, '');
};

如果有人能详细解释或指出一个关于如何使用 vanilla js 正确完成它的好教程,我将非常感激

标签: javascript

解决方案


处理用户输入的行业标准方法是什么

为目标数据格式使用适当的库。

应该删除/替换什么以及如何删除,以便 JSON 不会中断,尤其是当用户可以复制粘贴一些有史以来最奇怪的字符时?

没有什么。只需使用JSON.stringify,它就会处理扔给它的任何东西。

例如,如果您将数据发送到需要 JSON 输入的 Web 服务:

const name = $('input[name=name]').val();
const address = $('input[name=address]').val();
const ajax = jQuery.ajax({
    method: "POST",
    url: "http://example.com/endpoint",
    contentType: "application/json",
    data: JSON.stringify({ name, address })
});
ajax.then(data => console.log(data));

我很久以前提出的令人怀疑的解决方案是……</p>

看起来它是为转换为 HTML 而设计的,而不是 JSON。


推荐阅读