gpt4 book ai didi

javascript - PHP 中的 URL 编码正斜杠

转载 作者:行者123 更新时间:2023-11-30 09:47:51 25 4
gpt4 key购买 nike

我在 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 之前可能会被您的网络服务器解码为正常的路径分隔符。例如,Apache 有一个允许这些的特定设置:AllowEncodedSlashes On。

您可以使用它来阻止 Apache 解析编码的斜杠。

<VirtualHost 127.0.0.1:80>
ServerName site.example.com
AllowEncodedSlashes On
# ...
</VirtualHost>

关于javascript - PHP 中的 URL 编码正斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com