繁体   English   中英

php $ _REQUEST数据仅被半解码

[英]php $_REQUEST data is only half-decoded

我正在通过querystring检索编码的URL。 我需要再次将其传递到下一页。 当我第一次使用$_REQUEST['url']检索它时,仅对斜杠进行解码,例如:

http://example.com/search~S10?/Xllamas&searchscope=10&SORT=D/Xllamas&searchscope=10&SORT=D&SUBKEY=llamas/51%2C64%2C64%2CB/browse

urldecodephp docs页面建议不要解码请求数据,并说它已经被解码了。 我需要将其完全解码,以便无需再次对某些部分进行双重编码就可以再次对其进行编码,或者完全不需要解码。

我不确定为什么我的数据经验与php文档不一致。 感谢任何帮助或指向相同的指示!

编辑:尝试发布相关的代码,这些代码分散在:

网址被编码并添加到查询字符串(使用smarty模板的html文件中):
<a class="button" href="{$baseurl}search_nojs?searcharg={$searcharg|escape:'url'}&url={$next|escape:'url'}"><span>Next&gt;&gt;</span></a>

如果该链接被跟随,我从查询字符串(在一个php文件中)抓取URL:

  if(array_key_exists('url', $_REQUEST)) { $sm->assign("searchurl", $_REQUEST['url']); } 

然后,我想将网址重新粘贴到下一个链接的查询字符串中(在另一个html文件中):
href="{$baseurl}detail?bibid={$res.bibid}&searcharg={$searcharg}{if $searchurl}&searchurl={$searchurl}{/if}"

我还将{$searchurl}直接打印到页面上,并得到相同的一半转义结果。

这是查询字符串与我从$_REQUEST获得的数据的另一个示例:

最初在querystring中编码的url:
searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

$_REQUEST检索的数据:
searcharg=mammals&searchurl=http://example.com/search~S10?/Xmammals&searchscope=10&SORT=D/Xmammals&searchscope=10&SORT=D&SUBKEY=mammals/51%2C1114%2C1114%2CB/browse

我知道这种方法可能看起来很好奇-我正在尝试制作移动显示器,围绕黑盒数据库进行工作。 再次感谢任何帮助!!

这是查询字符串与我从$ _REQUEST获得的数据的另一个示例:

最初在查询字符串中编码的url:searcharg = mammals&url = http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals% 2F51%252C1114%252C1114%252CB%2Fbrowse

这是双重编码的。 例如: %252C -> %2C -> ,因此在对url参数进行编码时,您要引入双重编码。 也许您应该确保在对参数进行编码之前,对它们进行解码,直到无法对其进行解码(也称为规范化)为止。 您可以在循环中使用urldecode

您还希望确保在将url参数放回html上下文(作为链接)时,也可以对HTML属性进行转义。 否则,您将具有XSS漏洞。

逗号(U + 002C)是查询中的保留字符 ,因此必须使用%2C进行编码:

3.4。 查询组件

查询组件是由资源解释的信息字符串。

  query = *uric 

在查询组件中,保留字符“ ; ”,“ / ”,“ ? ”,“ : ”,“ @ ”,“ & ”,“ = ”,“ + ”,“ , ”和“ $ ”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM