JavaScript中用于转义引号的函数

12

首先声明,我并不擅长JavaScript,完全是个新手。现在说清楚了... 我遇到了一个小问题,正在尝试转义用户在我的搜索应用程序中输入的引号:

function getQString()
{
var query_str = 'q=' + $('input[name=q]').val().trim();
return  query_str;
}

这是在gsp文件中作为一种方法完成的,是否有JavaScript中等效的.escape()函数?

稍后将此查询发送到Elasticsearch时,由于引号特别是a"b等输入,会使我很困扰。

我正在使用ES 0.20.6版本。


$('input[name=q]').val().trim().replace(/\"/g,''); - adeneo
尝试使用 'q='+encodeURIComponent($('input[name=q]').val().trim()) - Passerby
encodeURIComponent是在URL中传递数据的正确方式。在客户端转义引号是不必要的。为了避免SQL注入,仍然需要在服务器上进行转义。 - Tommi
1个回答

16
query_str = query_str.replace(/"/g, '\\\"');

..将导致;" 转换为 \"

或者

query_str = query_str.replace(/"/g, '\\\\\"');

..将导致; " 被转义为 \\",这使得打印的引用仍然会被转义为 \"

这段代码;

var test = 'asdasd " asd a "';

console.log(test.replace(/"/g, '\\\"'));
console.log(test.replace(/"/g, '\\\\\"'));

..输出;

asdasd \" asd a \"
asdasd \\" asd a \\"

你可以根据最终的解释器读取和输出字符串的方式来调整替换。


在JS字符串中,"表示双引号"。 - Quentin
1
你不需要在单引号中转义双引号,因为 '"' 是正确的代码。 - Tommi
嗯,似乎仍然有些问题,现在它确实可以转义双引号了,但是Lucene似乎不喜欢它。我猜用单引号替换双引号可能是另一种方法?那看起来会像这样:query_str = query_str.replace(/"/g, '\''); 即:h"i --> h'i - Mantas
1
对于Lucene,双引号是用来定义短语标记的特殊字符。最好将其替换为某些中性的字符(例如空格),但这取决于您的引擎使用的分析器/分词器。实际上,默认的Lucene解析器将无法解析带有引号不匹配的查询。这里有一个关于查询语法的好参考。尽量避免/转义任何特殊字符或明智地使用它:http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html - Tommi
提醒一下,你的替换字符串只需要是'\\"'--因为在引用字符串中,另一种引号不需要转义。这样做没有问题,但可能会让人感到困惑。如果使用相同类型的引号'\\\''"\\\"",则需要三个斜杠。 - Gerard ONeill
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接