流明(5.8.7)-路径中的最终参数包括斜杠

问题描述 投票:1回答:1

我正在使用lumen 5作为简单的api将数据传递到另一个Web应用程序。请求中的最终参数已加密。这已经好几个月了,但是今天我们遇到了麻烦,最终的加密参数以斜杠结尾:

https://xxx.yyy.zz/test/69UBiV8iBSDBQMumdaU/

后面的斜杠实际上是加密字符串的一部分...

在我的路线/web.php:

...
router->get('/test/{code:.*}', 'SoapController@show');
...

出于测试目的,我还在public / .htaccess中注释了这些行:

# Redirect Trailing Slashes If Not A Folder...
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} /(.*)/$
#RewriteRule ^ /%1 [R=301,L]

我可以确认网址保留了斜杠,但仍然出现错误:

at Application->Laravel\Lumen\Concerns\{closure}(8, 'Trying to get property of non-object', 
 '/var/www/html/test/app/Http/Controllers/SoapController.php', 133, array('testparam' => 
 '**69UBiV8iBSDBQMumdaU**', 'response' => object(stdClass), 'xml' => '<package><diffgram 
 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml- 
 diffgram-v1"/></package>', 'customer' => object(SimpleXMLElement)))

这告诉我该参数不带斜杠而被接收,并且未正确解密。

我的问题是:如何将斜杠保留为参数字符串的一部分,以便可以正确对其进行解密?

谢谢

php routes lumen
1个回答
0
投票

/是URL的一部分。因此,您必须切换到URL安全的加密或编码方法。这意味着从URL中的加密中删除+/=。我认为您可以为此使用urlencodeurldecode(也许与base64_encodebase64_decode结合使用。

您还可以使用$request->url();并通过使用/分割preg_split("/\//", $string, -1, PREG_SPLIT_DELIM_CAPTURE);来自己解析。请注意,这仅在/位于末尾时有效。我不知道您使用的是哪种加密。

© www.soinside.com 2019 - 2024. All rights reserved.