我想捕获我的搜索字词并将它们传递给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中回显它的外部脚本来完成此操作。
答案 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()
试试这个:
var terms = "<!--#echo encoding="url" var="terms"-->";
terms = unescape(terms)
答案 2 :(得分:1)
我会在搜索文本框的onchange事件中添加一个javascript。捕获击键并忽略引号和可能输入的任何其他特殊字符。如果输入来自服务器端,则在将其发送到脚本之前对其进行清理。