【问题标题】:Extract particular point of URL in PHP在 PHP 中提取 URL 的特定点
【发布时间】:2018-12-17 12:00:07
【问题描述】:

我正在尝试使用 PHP 获取 URL 的一个非常特定的部分,以便以后可以将其用作变量。

我的网址是:

https://forums.mydomain.com/index.php?/clubs/11-Default-Club

我要提取的特定部分是/clubs/-Default-Club 位之间的11 部分。

我想知道最好的方法是什么。我在这里看到了使用正则表达式解析器的示例,但对于这个特定的实例,我无法理解它。

谢谢

编辑;这是我迄今为止使用爆炸查询尝试过的,但它似乎给了我上面 URL 中不存在的各种元素:

$url = $_SERVER['REQUEST_URI'];
$url = explode('/', $url);
$url = array_filter($url);
$url = array_merge($url, array());

返回:

Array ( [0] => index.php?app=core&module=system&controller=widgets&do=getBlock&blockID=plugin_9_bimBlankWidget_dqtr03ssz&pageApp=core&pageModule=clubs&pageController=view&pageArea=header&orientation=horizontal&csrfKey=8e19769b95c733b05439755827a98ac8 )

【问题讨论】:

  • 显示你当前的尝试
  • 正则表达式似乎有点矫枉过正。在这种情况下,一个简单的explode() 应该可以工作。你应该从做一些尝试开始。如果您无法使其正常工作,请回来,向我们展示您尝试过的内容、预期结果、您得到的结果,我们可以从那里为您提供帮助。
  • @AleksG 按要求添加。
  • 您添加的代码没有意义。看起来更像是方法调用的随机集合。另外,我根本看不出您如何从输入 URL 中获得显示的结果。你想要的是使用explode 分割/ 字符,然后再次使用explode 分割- 字符。
  • 如果这是 url 中唯一的数字,您可以使用 filter_var() 仅获取 INT 部分

标签: php url extract


【解决方案1】:

如果您希望带有破折号 (11-Default-Club) 的字符串始终位于末尾,您可以试试这个:

$url = $_SERVER['REQUEST_URI'];
$urlParts = explode('/', $url);
$string = end($urlParts);
$stringParts = explode('-', $string);
$theNumber = $stringParts[0]; // this will be 11

【讨论】:

    【解决方案2】:

    我宁愿明确:

    <?php
    $url     = 'https://forums.mydomain.com/index.php?/clubs/11-Default-Club';
    $query   = parse_url($url, PHP_URL_QUERY);
    $pattern = '@^/clubs/(\d+)[a-zA-Z-]+$@';
    $digits  = preg_match($pattern, $query, $matches)
                ? $matches[1]
                : null;
    
    var_dump($digits);
    

    输出:

    string(2) "11"
    

    【讨论】:

    • 这是唯一有效的方法。
    【解决方案3】:

    如果此 URL 结构适用于您网站中的所有 URL,并且您只想获取 URL 的整数/数字/数字部分:

    <?php
    $url = 'https://forums.mydomain.com/index.php?/clubs/11-Default-Club';
    $int = (int) filter_var($url, FILTER_SANITIZE_NUMBER_INT);
    echo $int;
    

    【讨论】:

    • 如果clubs url部分前面有数字怎么办?
    • 到目前为止,clubs 部分之前的数字不是问题的一部分。 (这就是为什么我提到“如果这个 URL 结构对所有 URL 都是固定的”)
    【解决方案4】:

    如果此网址结构适用于您网站中的所有网址,那么以下是获得价值的最佳方式。

    <?php
    $url = "https://forums.mydomain.com/index.php?/clubs/11-Default-Club";
    $url = explode('/', $url);
    $url = array_filter($url);
    $end = end($url);
    $end_parts = explode('-',$end);
    echo $end_parts[0];
    

    输出:

    11
    

    【讨论】:

    • 为什么这是最好的方法?
    • 因为使用它你可以正确地得到预期的结果。有没有其他办法可以回答。
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2018-09-20
    • 2013-02-25
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多