使用以下代码,我将用户重定向到执行一些操作的php脚本:

requestObject.queries = {
    lv   : searchQueryLV,
    desc : searchQueryDesc,
    ru   : searchQueryRU,
    oth  : searchQueryOth
};

var queryStr = $.param(requestObject);
location.replace('http://' + location.host + '/path/to/file.php?' + queryStr);


问题是queryStr可能包含一些html特殊字符,例如标记等。

当包含它们时,我的代码将失败。它以搜索部分看起来像这样的URL结尾:

queryType=search&queries[lv]=<br>&queries[desc]=&queries[ru]=&queries[oth]=


如您所见,我无法对queryString进行编码:

$.param(requestObject);


当我进行console.log记录时,它必须显示。但是,当我将其传递给location.replace()时,情况很糟。我试过使用JS原生encodeURI手动构建它,但这无济于事。

如果您能帮助我,我会很高兴。

最佳答案

在queryStr上的Javascript中使用encodeURIComponent函数可以转义queryStr中可能存在的URL中不允许的字符。

location.replace('http://' + location.host + '/path/to/file.php?' + encodeURIComponent(queryStr));


有关同一主题的其他信息,请参见this post

08-19 15:04