我正在创建一个搜索页面,您可以在其中键入搜索查询并将表单提交给search.php?query=your query.什么PHP函数是最好的,我应该用于编码/解码搜索查询?
我正在编写一个Web应用程序并学习如何urlencode html链接...
这里的所有urlencode问题(见下面的标签)都是"如何...?" 的问题.
我的问题不是"如何?" 但为什么?".
甚至维基百科文章也只讨论它的机制:
http://en.wikipedia.org/wiki/Urlencode,
但不是为什么我应该在我的应用程序中使用urlencode.
什么是安全使用(或者更确切地说,不使用)进行urlencode的含义是什么?
如何使用进行urlencode失败被利用?
使用未编码的网址会出现什么样的错误或失败?
我问,因为即使没有urlencode,我的应用程序开发网站的链接,如下所示按预期工作:
http://myapp/my%20test/ée/ràé
我为什么要使用urlencode?
或另一种说法:
我什么时候应该使用urlencode?在什么样的情况下?
我阅读了参考问题urlencode vs rawurlencode?在路上,我应该使用rawurlencode
例如
如果与其他系统的互操作性很重要,那么看来rawurlencode就是最佳选择.
但为什么urlencode发明呢?这是否意味着这个功能无用?
我们使用POST通过API调用传递ssh公钥.奇怪的是,当我们在PHP中获得值时,加号(+)符号被完全剥离.显然,这不起作用,因为它改变了公钥的价值.
请参阅以下原始卷曲请求:
curl "https://api.example.com/v1/keys" -X POST -d "key=ssh-dss AAAAB3NzaC1kc3MAAACBAOLsyYuyI0/3/UjajY8ljdgkAV2k9jZxjlVGWvHa9afMuO7DqsOcu0o4e5D9TPScsO5XrgTrmcXHkOtM54fOPdXSzonWOXUIn1XEumdHDlv9YRZTCW/A9qajhPR67y+92su9AqeGXI0/q3BXZsZcC1nr1NjgSiz++r+YZFVWfQsNAAAAFQCYBf0KXVLfYUE6cOTbWnBWn5Py9QAAAIEA3WAkAwhR7fhwWpxuwxNnsB8NXwsEs2NWiOaiMu3dmDWyqGRjfOYUchoLelBMpv4oLTZuaGW4/DCWfdh6pgrxs39MXf+FdTir8KeHIIoXEdcXpWqnuyNBdXn5XNY54vc1eMkbm4q3D1i3+IMhNAURasdvFRoDzgH9s68Ik3P5HrMAAACAab+CiT010wXMzv+6v+oWcRWbxhGou/ND+K2QGU1kAW+KuUGmhOgB6XPka7iEsIeA/+Ojh+OiNedFZlJAZq1jarew106YCOrUlbtDk7pAAUJQhIhKFhpNE0UhLRBWOF9LpjDwWu55dlrfLURE32TuMx/NsazWVypbzJqy48d2sg8= justin@mbpro"
Run Code Online (Sandbox Code Playgroud)
但是,当我们var_dump()在PHP中输出$ _POST ['key']的值时,它是:
string(601) "ssh-dss AAAAB3NzaC1kc3MAAACBAOLsyYuyI0/3/UjajY8ljdgkAV2k9jZxjlVGWvHa9afMuO7DqsOcu0o4e5D9TPScsO5XrgTrmcXHkOtM54fOPdXSzonWOXUIn1XEumdHDlv9YRZTCW/A9qajhPR67y 92su9AqeGXI0/q3BXZsZcC1nr1NjgSiz r YZFVWfQsNAAAAFQCYBf0KXVLfYUE6cOTbWnBWn5Py9QAAAIEA3WAkAwhR7fhwWpxuwxNnsB8NXwsEs2NWiOaiMu3dmDWyqGRjfOYUchoLelBMpv4oLTZuaGW4/DCWfdh6pgrxs39MXf FdTir8KeHIIoXEdcXpWqnuyNBdXn5XNY54vc1eMkbm4q3D1i3 IMhNAURasdvFRoDzgH9s68Ik3P5HrMAAACAab CiT010wXMzv 6v oWcRWbxhGou/ND K2QGU1kAW KuUGmhOgB6XPka7iEsIeA/ Ojh OiNedFZlJAZq1jarew106YCOrUlbtDk7pAAUJQhIhKFhpNE0UhLRBWOF9LpjDwWu55dlrfLURE32TuMx/NsazWVypbzJqy48d2sg8= justin@mbpro"
Run Code Online (Sandbox Code Playgroud)
有什么想法导致加号被删除?
http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip
urlencode($myurl);
Run Code Online (Sandbox Code Playgroud)
问题是,urlencode还将编码使URL无法使用的斜杠.我怎么能只编码最后的文件名?
当我使用curl库并尝试从url获取图像时,我得到400错误的请求错误.我发现问题在于编码网址.但在我的情况下它不起作用,因为我的网址 - 它是服务器端图像的路径 - 就像
http://example.com/images/products/product 1.jpg
Run Code Online (Sandbox Code Playgroud)
我理解名称文件中的用户空间是不好的做法,但它不是我的服务器而不是我创建这些文件.
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, urlencode($url));
echo $ret = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)
当我使用urlencode函数时 - curl返回http_code = 0
更新
$url = str_replace(' ', '+', $url);
Run Code Online (Sandbox Code Playgroud)
不起作用,服务器返回404错误.
应该编码PHP标头位置吗?
header("Location: ".$_SERVER["REQUEST_URI"]);
header("Location: ".rawurlencode($_SERVER["REQUEST_URI"]));
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么,何时以及如何?
我有一个字符串:
M%C3%B2nica
所以我需要得到类似"Mònica"的东西.
哪种是PHP的最佳方式?
如果我在Web服务调用中使用GET参数,我应该执行什么类型的转义?我在考虑使用htmlentities.
示例:http: //example.com/search.php?search = 1234
search.php中
使用$ _GET ['search']对另一个服务进行Web服务调用.