Strpos()返回意外的字符串

时间:2013-01-06 14:50:08

标签: php strpos

我为我的生活无法弄清楚为什么这不起作用。

$value="http://www.google.com/trends/hottrends/atom/feed?pn=p1";

$startvar="http://";
$endvar="/";

$start = strpos($value,$startvar);

$end = strpos($value,$endvar,$start) + 8;

$results = substr($value,$start,$end-$start);
echo $results;

无论我做什么,它总会返回我不想要的http://。我只想要www.google.com。我在另一个区域使用它,它的行为与我想要的完全一样。如果我使用数字起点而不是$ startvar,我确实可以使用它,但这不一定会一直有效。

我确信这很简单,我很想念。

由于 布鲁斯

2 个答案:

答案 0 :(得分:2)

您需要跳过整个$startvar令牌才能转到字符串的下一位。 strpos返回匹配的开头。

$start = strpos($value,$startvar) + strlen($startvar);

虽然您还需要确保strpos未返回false,如果找不到$startvar,它将会执行此操作:

$pos = strpos($value, $startvar)
if ($pos !== false)
{
   $start = $pos + strlen($startvar)
   //... other steps here...
}

如果你的目标只是解析一个URL,你可以使用PHP函数parse_url,这将使你的生活更轻松。

答案 1 :(得分:1)

为什么不使用

$value="http://www.google.com/trends/hottrends/atom/feed?pn=p1";
list($a,$b,$c) = split('[/]',$value);

echo'<br/>a = ',$a;
echo'<br/>b = ',$b;
echo'<br/>c = ',$c;

您会发现$c是您的答案。