【问题标题】:PHP parameters inside url cumulated parameterurl中的PHP参数累积参数
【发布时间】:2020-11-26 04:29:09
【问题描述】:

假设我有一个网址

http://www.somepage.com/clicker.php?id_campaign=8&id_email=9324&url=https://www.google.com/search?q=dog&sxsrf=ALeKk019eteEpAwVf2Fk4qYo7TiwhuMQ_Q:1596666153666&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiqzqf3jIXrAhUisaQKHRayBWAQ_AUoAXoECBkQAw&biw=1920&bih=921#imgrc=M4wsJO0A7OQfTM

我正在尝试获取参数 id_campaignid_emailurl 但是,使用代码:

$url = htmlspecialchars_decode($url);
$parts = parse_url($url);
parse_str($parts['query'], $query);

打印 $parts['query'] 时,它只会给我:

https://www.google.com/search?q=dog

因为它认为 url 的其余部分是另一个参数...

那么如何从 $url 中获取所有 url 参数?

【问题讨论】:

  • 你真的应该 url_encode google.com/… 在把它放到 url 之前。
  • $url 是变量,由于其他重要原因我无法以任何方式修改,我只能更改从 $url 解析参数的方式
  • 不,它不能正常工作,只是尝试回显 $query['url']

标签: php url url-parameters


【解决方案1】:

在理想情况下,查询中传递的 URL 将是 URL 编码的,而不是 HTML 编码的。

在您的情况下,您可以做的是将所有 & 手动替换为临时的东西,然后在解析 URL 后将它们全部替换回来。这并不完全漂亮,但有效:

$url = str_replace('&', '__TEMP__', $url);

$parts = parse_url($url);
parse_str($parts['query'], $query);

$urlParam = str_replace('__TEMP__', '&', $query['url']);

echo $urlParam;

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多