首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用查询字符串值安全地设置输入值

使用查询字符串值安全地设置输入值
EN

Stack Overflow用户
提问于 2013-11-05 19:11:04
回答 1查看 597关注 0票数 0

我有一个<input type="text">,我希望安全地将它的值设置为"q“查询字符串。因为如果查询字符串包含特殊字符(+,#,...),JS将停止执行。

我已经尝试过encodeURIComponent()encodeURI(),但是搜索框中的值也会被转义,所以您会在搜索框中得到一些奇怪的东西。

我也尝试过decodeURIComponent(encodeURIComponent()),但这将使JS停止执行。

另外,PHP不是我想要使用的解决方案,所以让我们忘记PHP GET,即使它能工作。

试试这个bug:http://smartsearch.altervista.org/?q=the+plus+character+breaks+the+code

由于您可以看到面板不再工作(点击工具栏按钮,他们应该显示一个面板)。当没有带有特殊字符的查询字符串时,面板完美地工作。

完整代码(按某些人的要求):

代码语言:javascript
复制
$(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");
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 19:16:08

如果您引用https://www.rfc-editor.org/rfc/rfc3986#section-2.2的部分

_

RFC接着说

如果URI组件的数据与保留字符作为分隔符的用途相冲突,那么在形成URI之前,冲突的数据必须是百分比编码的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19796885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档