Php 提取$\u GET变量的特定部分或URL本身

Php 提取$\u GET变量的特定部分或URL本身,php,Php,用户来到我的网站,他们每次都有新的url变量,但结局总是一样的 /dp/随机ID/ http://mywebsite.com/?source=text&keyword=site.com/random-text/dp/10505/ 所以我想保存的是/dp/这个id/我考虑过使用类似的东西: $keywword = $_GET['keyword']; $keyword = $_GET['keyword']; $foo = explode('/', $keyword); $id

用户来到我的网站,他们每次都有新的url变量,但结局总是一样的 /dp/随机ID/

http://mywebsite.com/?source=text&keyword=site.com/random-text/dp/10505/
所以我想保存的是/dp/这个id/我考虑过使用类似的东西:

  $keywword = $_GET['keyword'];
$keyword = $_GET['keyword'];
$foo     = explode('/', $keyword);
$id      = $foo[3];

以及一些如何提取随机ID的方法,如在正则表达式中,您可以找到/dp/和/之间的值,并将其保存到变量$ID以便以后使用。

您可以执行以下操作:

  $keywword = $_GET['keyword'];
$keyword = $_GET['keyword'];
$foo     = explode('/', $keyword);
$id      = $foo[3];


我还打算提出一个regExp解决方案:

preg_match('/dp\/([^\/]+)\//', $url, $matches);
$id = $matchs[1];
regExp解决方案的好处在于,如果您的
关键字
参数发生了变化,只要您要查找的id前面有
dp/
,该参数就仍然有效

或使用正则表达式:


也许这会奏效:

$keyword = $_GET['keyword'];
$id = preg_replace('#^(?:.+)?\/dp\/([0-9]+)\/(?:.+)?$#', '$1', $keyword);

我会说你需要从一个有效的url开始。查询字符串中不允许使用空格,因此,如果随机文本包含这些或其他不允许的字符,则无论您选择何种方式,都可能出现中断。@jeroen这是我自己对文本所做的更改-所以这是我的错!我不知道:)如果您的查询sting编码正确,您可以使用前两种解决方案中的任何一种。@jeroen什么是更好的选择?我的网站在性能方面很重要?字符串(或数组)函数几乎总是优于正则表达式,但您必须测试它,因为您需要多个函数,而不是一个正则表达式。这很好!这就像检查第三个“/”并在它之后返回所有内容?最后一个呢?结果会是这样吗?10505/或10505(我需要不带/)它将
$\u GET['keyword']
的值转换为一个由
/
分隔的值数组;在这种情况下,10505是该值。由于
/
是分隔符,
$foo[3]
不应显示为
10505/
,而应显示为
10505
。如果你发现自己需要删除字符,你可以使用。我可以看到你得到了0-9这意味着它不会检测到字母?很抱歉,我只包含了数字,但有时它们会包含字母A1512B23。这是随机的:)@MarkVoidale在这种情况下,您可以将
[0-9]+
替换为
\w+
我可以看到您得到了0-9这意味着它不会检测到字母?很抱歉,我只包含了数字,但有时它们会包含像A1512B23这样的字母,这是随机的:)如果您有字母,只需将
[0-9]
更改为
[a-z0-9]
。这将为您提供:
$id=preg\u replace('.^(?:.+)?\/dp\/([a-z0-9]+)\/(?:.+)?$i','$1',$关键字)
(由于可能的情况,我在
#
之后添加了选项
I