我有一个<input type="text">
并且我想将它的值安全地设置为“q”查询字符串。因为如果查询字符串中包含特殊字符(+,#,...)
,JS会停止执行。
encodeURIComponent()
和试过encodeURI()
了,但是搜索框中的值也会被转义,所以你会在搜索框中得到一些奇怪的东西。
我也尝试过decodeURIComponent(encodeURIComponent())
,但这会使 JS 停止执行。
此外,PHP 不是我想要使用的解决方案,所以即使 PHP GET 有效,我们也别管它了。
试试这个错误:http ://smartsearch.altervista.org/?q=the+plus+character+breaks+the+code
正如您所见,面板不再起作用(单击工具栏按钮,它们应该显示一个面板)。当没有带有特殊字符的查询字符串时,面板可以完美地工作。
完整代码(如某些人要求的那样):
$(function() {
if(getParameter("q") && getParameter("engine")) {
search(getParameter("q").replace("smartsearch://",""),getParameter("engine"));
}
else if(getParameter("engine")) {
$(".search-engine a[data-engine-shortname="+getParameter("engine")+"]").click();
}
else if(getParameter("q")) {
search(getParameter("q").replace("smartsearch://",""));
}
});
// Helper functions
function getParameter(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
function search(query,engine) {
var searchengine = engine || $(".search-engine.selected a").attr("data-engine-shortname");
var searchengineurl = $(".search-engine a[data-engine-shortname="+engine+"]").attr("data-engine-url") || $("#search-form").attr("action");
var searchquery = query || $("#search-input").val();
var currenturl = "?q=" + searchquery.split(' ').join('+') + "&engine=" + searchengine;
var icon = $(".search-engine a[data-engine-shortname="+engine+"] img").attr("src") || $(".search-engine.selected a img").attr("src");
if($.trim(searchquery) != "") {
$("#results-frame").attr("src",searchengineurl + searchquery);
$("title").html(searchquery + " - SmartSearch");
history.replaceState(null, null, currenturl);
if(engine) {
$(".search-engine a[data-engine-shortname="+engine+"]").click();
}
$("#search-input").val(searchquery);
$("#favourite-button").removeClass("starred disabled");
if(bookmarks.check(searchquery,searchengine)) {
$("#favourite-button").addClass("starred");
}
}
else {
$("title").html("SmartSearch");
$("#favourite-button").addClass("disabled");
$("#favourite-button").removeClass("starred");
if(bookmarks.check(searchquery,searchengine)) {
$("#favourite-button").addClass("starred");
}
}
}