如何逃避可能包含引号的内容?

时间:2008-12-18 19:06:36

标签: javascript

我想捕获我的搜索字词并将它们传递给JavaScript变量,但我不知道如何处理可能出现的引号。

这是我目前所拥有的:

var searchTerms = "<!--#echo var="terms"-->";
var pattern = / /g;
newSearchTerms = searchTerms.replace(/[^a-zA-Z 0-9]+/g,'');
var searchStr=newSearchTerms.replace(pattern,"_");

我担心如果“条款”包含双引号(或者如果我在JS中使用单引号则是叛教)那么我的函数将会失败。

如何在字符串进入脚本之前将其转义?

谢谢,
史蒂夫


编辑/回答:我最终通过将其移动到捕获并解析查询字符串而不是在HTML中回显它的外部脚本来完成此操作。

3 个答案:

答案 0 :(得分:3)

如果terms包含引号,那么当您完成var searchTerms = "<!--#echo var="terms"-->";时,替换任何引号已经太晚了,您的JavaScript将无效。例如,如果terms包含这些是“条款”,您的JavaScript将显示如下(并在浏览器中产生语法错误):

var searchTerms = "These are the "terms"";

如果您确定terms只包含双引号,则可以执行以下操作:

var searchTerms = '<!--#echo var="terms"-->';

如果它可以包含单引号和双引号,则需要使用比<!--#echo var="..."-->更复杂的服务器端技术清理服务器上的输出。

答案 1 :(得分:2)

从您的代码看起来您​​正在使用Apache SSI包含。 echo SSI有一个名为encoding的属性,可让您指定url样式编码。您可以通过这种方式对引号进行编码,只需使用unescape()

在Javascript中取消编码即可

试试这个:

var terms = "<!--#echo encoding="url" var="terms"-->";
terms = unescape(terms)

答案 2 :(得分:1)

我会在搜索文本框的onchange事件中添加一个javascript。捕获击键并忽略引号和可能输入的任何其他特殊字符。如果输入来自服务器端,则在将其发送到脚本之前对其进行清理。

相关问题