【问题标题】:PHP: How do I get the middle of my $_GET variable?PHP:如何获取 $_GET 变量的中间值?
【发布时间】:2014-02-06 04:24:47
【问题描述】:

我有一个$_GET 变量,它是md5('currentdate') + ID + 另一个加密随机字符串的组合。希望有了这个,我可以以某种方式保护我的 URL。

示例网址:

create_pdf.php?goto=qredit&qrid=1e02b73e2b1cb88685499f38508cf6e84317e62166fc8586dfa4d1bc0e1742c08b
                                                                ^^

我需要获取$_GET['qrid'] 变量的中间值,在本例中为43。 我尝试使用substr(),但没有得到我想要的结果。

更新: 以下是我生成 $_GET 变量的方法。

<a href="create_pdf.php?goto=qredit&qrid=<?php echo md5($today).$_GET['qrid'].md5($_GET['qrid']); ?>" target="_blank" id="upload_button">-random whatnot-</a>

【问题讨论】:

  • * 不是字符串的一部分。我试着让它加粗,这样你就可以看到它在哪里。
  • 我是新来的。我为我的错误道歉。
  • 第二个加密字符串的长度是否固定?如果是这样,您可能必须使用 if-else 来查找中间部分。
  • 使用 md5 将始终产生 32 个字符 AFAIK。
  • 是的,所以你也使用 md5。我明白了

标签: php jquery string variables get


【解决方案1】:

假设第一个和第二个字符串是固定的 32 个字符,试试这个从字符串中检索 ID 值:

// Get all characters up to the last 32 chracters, starting at 32nd character
$id = substr($_GET['qrid'], 32, strlen($_GET['qrid'])-64);

【讨论】:

  • 这也是我的第一个解决方案。但是,ID 并不总是 2 个字符。未来可能会更多。
  • @user3277936 “另一个加密的随机字符串”是固定长度吗?如果有,有多少个字符?
  • 它也是 md5。所以是 32 岁。
  • 嘿,它成功了。想解释一下您的代码中发生了什么?谢谢!
  • @user3277936:注意查一下手册中的功能,然后自己找出来……?
【解决方案2】:

可以使用正则表达式来获得更清洁的解决方案。假设它是 MD5,前端和结束字符串总是 32。中间捕获组将从 0 开始获取您的 id。

preg_match('/\d{32}(\w+)\d{32}/', $_GET['qrid'], $matches);
$id = $matches[1];

【讨论】:

  • 你知道他们说什么,“如果你尝试使用正则表达式解决问题,你就会遇到两个问题。”干杯。 :)
  • 是的,不应该过度使用它,我认为它对轻量级的东西很方便
猜你喜欢
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2017-02-13
  • 2018-01-12
相关资源
最近更新 更多