从字符串中提取url(无正则表达式)

时间:2015-01-30 05:14:02

标签: php

我有一个包含url的字符串。我试图以最有效的方式从附加文本中提取url。到目前为止,我一直在使用爆炸,但我必须爆炸两次,然后重建网址。正则表达式不是我主宰的东西,所以我把它排除在外(除非它是最好的解决方案)。有没有办法一步提取网址?

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$strip1  = explode( '&', $url );
$strip2  = explode('=', $strip1[0]);
$result =  $strip2[1].'='.$strip2[2];

结果:

http://www.somesite.com/sites/pages/page?id=1545778

5 个答案:

答案 0 :(得分:1)

尝试这样:使用 preg_split()

$date = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$t =preg_split("/[=&]/",  $date);
echo $t[1]."=".$t[2]; //output: http://www.somesite.com/sites/pages/page?id1545778

答案 1 :(得分:0)

$strip1  = explode( '/url?q=', $url );

使用此正则表达式$ strip1

^((http):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$

您将在网址

中获得一系列部分

答案 2 :(得分:0)

丑陋的一步法无正则表达式解决方案。

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$result = substr( $url, strpos( $url, '=' ) + 1, strpos( $url, '&' ) - strpos( $url, '=' ) - 1 );
echo $result;

更清洁的两步变化。

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$start = strpos( $url, '=' ) + 1;
$result = substr( $url, $start, strpos( $url, '&' ) - $start );
echo $result;

有点不那么丑陋的正则表达式解决方案。

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$result = preg_replace( '/[^=]*=([^&]*).*/', '${1}', $url );
echo $result;

两者都产生以下输出。

http://www.somesite.com/sites/pages/page?id=1545778

答案 3 :(得分:0)

从技术上讲,URL中的第二个?应该是URL编码的,但我们可以解决这个问题。使用parse_url获取查询,然后使用str_replace?替换为URL编码版本。在此之后,您将拥有一个可以使用parse_str解析的有效查询。

$query = parse_url($url, PHP_URL_QUERY);
$query = str_replace("?", urlencode("?"), $query);
parse_str($query, $params);
echo $params['q'];

// displays http://www.somesite.com/sites/pages/page?id=1545778

答案 4 :(得分:0)

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";

$strip3  = current(explode('&',end(explode('=', $url,2))));
print_r ($strip3);    //output  http://www.somesite.com/sites/pages/page?id=1545778