从htmlentities()编码的url中提取url参数的正确方法?

时间:2016-04-04 07:42:18

标签: php url html-entities

我有这个php文件resizeImage.php,可以这样调用 -

http://<domain>/fam/resizeImage.php?&srcImg=<url encoded URL of a remote image>&width=<width>&height=<height>

但是,另一个模块以这种方式调用此URL的htmlentities编码版本 -

htmlentities(http://<domain>/fam/resizeImage.php?srcImg=<url encoded url>&width=<width>&height=<height>)

因此,以下是一个名为 -

的示例网址
http://<domain>/fam/resizeImage.php?srcImg=https%3A%2F%2Flh3.googleusercontent.com%2FVRY0O_3L8VH2wxJSTiKPr72PeM5uhPPFEsHzzYdxenddpTI150M0TYpljnZisQaROR0%3Dh256-rw&amp;width=640&amp;height=960

现在,resizeImage.php收到了请求,但我无法使用$ _REQUEST [&#39; width&#39;]获取参数宽度,但我可以执行以下操作 -

  • 获取htmlentities_decode($ _ SERVER [&#39; REQUEST_URI&#39;])
  • 使用&对其进行爆炸以获取参数值对。
  • 使用=进行爆炸以获取参数值。

所以,有两件事 -

  • 我想知道这是否是在这种情况下提取参数的正确方法。
  • 我不知道调用模块调用htmlentities编码的URL的原因。能有更好的方式来建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用PHP的内部函数来解析和解码URL:

以下是我提出的示例代码(you can try it out here):

$parsed = parse_url($url);
parse_str(urldecode(html_entity_decode($parsed['query'], ENT_HTML401)), $tmp);

var_dump($tmp);

...将您的网址参数渲染为关联数组:

array(3) {
  ["srcImg"]=>
  string(109) "https://lh3.googleusercontent.com/VRY0O_3L8VH2wxJSTiKPr72PeM5uhPPFEsHzzYdxenddpTI150M0TYpljnZisQaROR0=h256-rw"
  ["width"]=>
  string(3) "640"
  ["height"]=>
  string(3) "960"
}

至于第二部分,我认为第二个模块的方法更安全一些,因为您将URL放在URL的参数中。如果您不想在解析和从参数中删除不必要的部分时遇到麻烦,那么对整个进行编码是一种简单而安全的方法,可以防止您的网址出现语法错误。

答案 1 :(得分:0)

在某些情况下,当人们在get参数中发送html代码时,单个参数上的htmlentities在标签上可能没问题,但链接本身也没有 - 他们应该使用urlencode:

<a href="htpp://yourdomain.tld/?param1=<?php echo urlencode('<somehtmltag>'); ?>>htpp://yourdomain.tld/?param1=<?php echo htmlentities('<somehtmltag>'); ?></a>