Javascript 如何针对特殊标志确保搜索安全?

Javascript 如何针对特殊标志确保搜索安全?,javascript,Javascript,我正在使用GoogleBooksAPI进行搜索 “”+文本 使用时: book.innerHTML = '<input type="button" data-text="' data.items[i].volumeInfo.description +'">'; book.innerHTML=''; 我的一些结果不起作用,我发现一些描述在开头有一个引号,即 “\”它就在那里,悬挂在学校上方的天空中:燃烧着的绿色骷髅头上有一条蛇的舌头,食死徒每次进入一座建筑时留下的印记。。。无论他们

我正在使用GoogleBooksAPI进行搜索

“”+文本

使用时:

book.innerHTML = '<input type="button" data-text="' data.items[i].volumeInfo.description +'">';
book.innerHTML='';
我的一些结果不起作用,我发现一些描述在开头有一个引号,即

“\”它就在那里,悬挂在学校上方的天空中:燃烧着的绿色骷髅头上有一条蛇的舌头,食死徒每次进入一座建筑时留下的印记。。。无论他们在哪里谋杀…“当邓布利多”


如何避免此错误?

与其指定字符串中不希望出现的特殊字符,不如指定所需的字符。例如,如果字符串必须只包含字母(a到z和a到z)、数字、空格和点,则以下内容对您很有用

var str = data.items[i].volumeInfo.description
str = str.replace(/[^a-zA-Z0-9 \.,]/g, "");
说明:

[a-z]表示a-z中的任何字符

[a-zA-Z]表示a-Z和a-Z中的任何字符

[a-zA-Z0-9]是指a-z和a-z以及0-9中的任何字符

[a-zA-Z0-9]是指a-z和a-z以及0-9和空格中的任何字符

[a-zA-Z0-9\.]是指a-z、a-z和0-9中的任何字符以及空格和点

如果希望允许更多字符,只需将它们添加到逻辑中即可。例如,如果您想允许下划线“x”,那么新的正则表达式将是

 str.replace(/[^a-zA-Z0-9 \._]/g, "");

这不是一个错误。谷歌返回的数据是JSON格式的

从中我们可以看到,JSON使用双引号,而不是单引号作为标记语法。转义双引号-如下所示:
\“
用于防止字符串过早关闭

当通过命令运行返回的数据时,它会将“字符串化”数据转换为JavaScript对象。解析后,您可以使用点
符号和括号
[variable]
符号访问属性

试着这样做:

var searchUrl = 'https://www.googleapis.com/books/v1/volumes?q=' + text;
var response = useYourAjaxMethodHere(searchUrl);

response = JSON.parse(response);

console.log(response.items[0].volumeInfo.description);

使用DOM,而不是
innerHTML
。你的意思是什么?使用DOM API,如
document.createElement(“输入”)构建
书籍的内容
,而不是将需要繁琐转义的html字符串放在一起。可能会很有帮助。谢谢你的建议,但不知道如何实现它们。有什么例子吗?我正在使用Ajax,Ajax还没有解决这个问题吗?我正在成功区域的for循环中创建按钮。这是正确的,但没有解决html问题转义问题。JSON字符串仍然可以包含引号和其他特殊字符。我收到以下错误SyntaxError:JSON解析错误:意外标识符”对象“您是否有一个正在运行的jsfiddle.net或plnkr.co代码示例,我们可以看到它来帮助您解决问题?@Bergi是的,JSON可以在内部包含这些项目。根据官方的JSON.org规范(大约是页面的1/2),双引号显示为标记语法。插图中未列出单引号和其他特殊字符,但它们可以在文本字符串中使用。我已经更新了我的答案来澄清它。