从字符串中获取数字,除了html实体编号

时间:2013-10-23 01:23:33

标签: php

我正在尝试从网址中提取ID,(下面的“123456789”数字)。

例如,这不起作用: https://www.facebook.com/pages/page-name%C3%A5rd/123456789

注意网址中的'%C3%A5'。

但这有效: https://www.facebook.com/pages/page-name/123456789

这是我正在使用的PHP:

    if (strpos($url,'pages') == true) {

    $page_id = preg_replace("/[^0-9]/","",$url);

    }

1 个答案:

答案 0 :(得分:1)

$array = array();
if (preg_match('#pages/[^/]+/(\d+)#',$url,$array)){
    $page_id = $array[1];
}

说明:我不确切知道Facebook网址是如何工作的,但我认为你正在查看网址的一个子集 - 从页面开始 - 而且数字部分实际上是由/字符分隔的。在我看来,这比寻找3个以上的数字更好,这是在网址中找到网址编码字符的任意“反应”。

我认为你不能假设他们之后什么也没有,url参数在社交媒体网站中似乎很常见。

另一件事是#作为一个正则表达式“包装字符”,我在更广泛的现实生活网址中的经验,所以我建议默认使用它,而不是在大多数示例中使用/。此外,当我开始使用正则表达式时,我经常尝试使用。来覆盖一组字符。 - 任何字符,0或多次,非贪婪。我发现使用“不是那个字符模式”,在这种情况下[^ /] +(不是斜线)工作更可靠。您可以使用它来匹配html标签:] >或html标签的属性:] “[^”] “[^>] *>