PHP中的正斜杠编码
URL Encoding forward slashes in PHP
我在PHP中有一个页面,我试图连接到API并获取摩托车信息,这里的问题是我使用内部路由通过CURL调用API,此路由可访问如下
http://mywebpage.dev/manufacturer/BETA/year/2016/category/M/model/MINI%20CROSS%2010%2F10/versions
我对此进行编码,然后我尝试将其发送到API,在那里它被解码并发送回JSON响应,但问题是,由于某种原因,它甚至没有到达路由的方法每当我有任何向前斜杠,无论我编码它们与否…
我真的没有选择了,到底是什么问题?URI编码不应该解决这些问题吗?为什么PHP仍然把%2F当作正斜杠来处理?有什么办法能解决这个问题吗?
编辑在我的javascript中,我通过jQuery获得模型的文本并将其编码如下
var model = $(".model-list li.active").text();
model = encodeURI(model);
然后我有一个laravel路由,从Javascript调用中获取编码字符串,并将其返回给PHP函数
public function versionsByYear($manufacturer, $year, $category, $model)
{
$manufacturer = str_replace(" ", "%20", $manufacturer);
$model = str_replace(" ", "%20", $model);
return $this->connect('manufacturer/'.$manufacturer.'/year/'.$year.'/category/'.$category.'/model/'.$model.'/versions');
}
链接到向外部API发出CURL请求的另一个
public function connect($method)
{
$url = $this->apiUrl . '/' . $method;
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array('Token: ' . $this->token),
CURLOPT_RETURNTRANSFER => true
));
$out = curl_exec($ch);
curl_close($ch);
return $out;
}
API本身不是问题,因为当我传递给它完全相同的编码模型名称时,它会在我的应用程序上失败。应用程序只是返回一个空字符串,完全没有找到路由中定义的方法,可能是由于将编码的%20解释为正斜杠?
编码的斜杠可能在传递给PHP之前被web服务器解码为正常的路径分隔符。例如,Apache有一个特定的设置来允许这些:AllowEncodedSlashes On.
你可以使用这个来阻止Apache解析编码的斜杠。
<VirtualHost 127.0.0.1:80>
ServerName site.example.com
AllowEncodedSlashes On
# ...
</VirtualHost>
PHP Documentation对于这里发生的事情有一个非常好的解决方案:
<?php
function myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
return str_replace($entities, $replacements, urlencode($string));
}
?>
http://php.net/manual/en/function.urlencode.php 处理特殊字符。
**如果这不是你想要的,可能值得在这里发布你的代码或澄清发生了什么。
相关文章:
- 将地理编码结果转换为php变量以发布到mysql数据库
- 如何在做PHP时在base64中动态编码;preg_ replace”;
- 如何将JSON编码的PHP数组发送到同一页面上的数据表
- 如何使Jquery编码的动态下拉菜单与PHP GET变量协调工作
- 如何在JS中编码URL并在PHP中解码
- 使用php在html中搜索硬编码的JavaScript变量
- php中javascript解码中的base64编码
- 无法读取js中的php JSON编码数据
- 如何在 JS 上使用 PHP 变量 (fetch_array) ?(JSON 编码)
- 将 JSON 编码的 PHP 变量传递给 HighCharts
- PHP 的 HTTP 基本身份验证的password_hash编码
- PHP(PDO)url编码如何在javascript中解码?decodeURI?或解码URI组件
- 是否可以将PHP的一个简单片段重新编码为javascript
- 使用javascript小部件对php进行字符集编码
- PHP数组JSON编码和该对象在ExtJs中解码
- 如何处理json编码的php-mysql数组
- Javascript/PHP中的HTML转义/编码
- 谷歌地图地理编码PHP可以在IE中工作,但不能在Chrome/mobile、Edge或Safari/mobile中工作.
- json_在Ajax请求中编码Php变量
- PHP或JavaScript解析JSON编码PHP数组到JavaScripts JSON.parse()时的问题