如何正确读取编码的get varible

时间:2018-03-18 05:13:35

标签: javascript php

我有一个搜索引擎,可以执行以下操作:

读取输入值并使用js对其进行编码,然后重定向。

//read and save into `query` var
window.location.href = "/search/" + encodeURIComponent(query);

因此,如果用户输入

  

&的含义是什么?签到?

ulrl不能像这样结束;

expample.com/search/What%20is%the%meaning%20of%20&this%20sign?

而是获得:

expample.com/search/What%20is%the%meaning%20of%20&26this%20sign%3F

现在当我转储$ _GET ['参数']时,我得到了

string() "search/What is the meaning of "

我希望得到:

What is the meaning of & sign ?

我试过了:

$val = urldecode($_GET['parameters']);

但我没有运气,也许我应该改变javascript编码网址的方式,你的建议是什么?

3 个答案:

答案 0 :(得分:1)

只要您使用标准$_GET superglobal语法,PHP就会自动将URL参数解码到query string。如果您使用自己的语法,则必须滚动自己的代码(输入表单中已有自定义代码)。

可以从$_SERVER['REQUEST_URI']获取原始URL,并使用您选择的文本操作工具进行解析。值得注意的是,这不是一个不常见的设置(许多PHP框架以这种方式做事)。

答案 1 :(得分:0)

您已经提到过您正在调用以下内容来获取用户查询的值:

$val = urldecode($_GET['parameters']);

这意味着调用PHP页面的URL的形状类似于以下内容:

http://foo.bar/?parameters=<the query here>

在网址中包含的重要内容是?;在解析URL时,?表示随后发生的任何事情都是URL编码的查询。

因此,在你的javascript中:

window.location.href = "/search/?parameters=" + encodeURIComponent(query);

然后您现有的代码应该可以使用。

答案 2 :(得分:-1)

只做

在客户端

  

window.location.href =“/ search /”+ query;

并在服务器端

  

$ val = urldecode($ _ GET ['parameters']);

相关问题