0

我有一个与 jquery 和 php 一起使用的搜索框,当您在此搜索框中输入内容时,jquery 会准备一个查询并重定向位置。准备查询部分效果很好,但重定向部分的编码查询存在问题。页面在重定向之前自动解码编码的查询。

如果您在搜索框中键入“test1 test2 test3”,它会使用 encodeURIComponent() 成功地将查询编码为 test1%20test2%20test3。

现在页面将自己重定向到 result.php+query。我的问题是页面转到 result.php?q=test1 test2 test3 而不是 result.php?q=test1%20test2%20test3。

这是代码

 if($("#searchbox").val() != "")
 {
    var mq1 = encodeURIComponent($("#searchbox").val());
    var query = "q="+mq1;

 }

 alert(query);
 if(query!="")
 location = "result.php?"+query;

警报结果是 q=test1%20test2%20test3 但结果是 result.php?q=test1 test2 test3

编辑:如果我使用带有重定向代码的 encodeURIComponent 函数,它工作得很好。

 alert(query);
 if(query!="")
 location = "result.php?"+encodeURIComponentquery);

这些代码正在工作,但它也编码 q= 部分。

4

4 回答 4

1

我想也许只是test1 test2 test3地址栏中显示了浏览器,但服务器获得了正确的值。您可以通过诸如 firebug 之类的浏览器开发工具进行检查,甚至可以在服务器中进行检查。

于 2012-06-07T08:14:20.137 回答
0

为什么不改成result.php?q=+encodeURIComponent(query)

于 2012-06-07T08:19:28.900 回答
0

既然您使用的是 jQuery,为什么不直接写这个:

if ($("#searchbox").val()) {
    location = 'result.php?' + $.param({
        q: $("#searchbox").val()
    });
}
于 2012-06-07T08:23:44.807 回答
0

这是您编写的内容的变体-在输入查询后等待回车键被击中(因为我不确定您的代码的上下文,它是否位于表单的提交方法中):

$('#searchbox').keypress(function(e) {
   if(e.which == 13 && $(this) {
       $(this).blur();
       var mq1 = encodeURIComponent($(this).val());
       var query = "q="+mq1;
       window.location = "result.php?"+ query;
   }
});

使用它,它会创建以下 URL:

result.php?q=multiple%20words%20in%20the%20url%20work%20fine

我认为您的代码几乎就在那里,但是围绕 IF 语句的逻辑引起了问题。

于 2012-06-07T08:26:00.843 回答