我有一个搜索引擎,可以执行以下操作:
读取输入值并使用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编码网址的方式,你的建议是什么?
答案 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']);