需要删除PHP后面的所有内容

时间:2011-08-06 14:09:47

标签: php string

我有这个链接:http://www.youtube.com/e/fIL7Nnlw1LI&feature=related

我需要在PHP中使用一种方法来完全删除链接中每个&之后的所有内容。

所以它会变成:http://www.youtube.com/watch?v=fIL7Nnlw1LI

注意它可能有多个&

EACH&,&之后的一切包含,必须从字符串中删除

如何在PHP中完成?

6 个答案:

答案 0 :(得分:3)

你可以这样做::

$var = "http://www.youtube.com/e/fIL7Nnlw1LI&feature=related";

$url = explode("&", $var);
$url = $url[0]; //URL is now what you want, the part before First "&"

答案 1 :(得分:3)

正如我在rpevious中写的那样你可以使用这个1行脚本:

$str = strtok($str,'&');

答案 2 :(得分:1)

您可以将strpossubstr合并:

$spos = strpos($s, "&");
$initial_string = $spos ? substr($s, 0, $spos) : $s;

答案 3 :(得分:1)

$url = "http://www.youtube.com/e/fIL7Nnlw1LI&feature=related";
$ampPos = strpos($var, '&');
if ($ampPos !== false)
{
   $url = substr($url, 0, $ampPos);
}

不要使用explode,regexp或任何其他贪心算法,这会浪费资源。

编辑(添加了性能信息):

在preg_match文档中:http://www.php.net/manual/en/function.preg-match.php

使用以下代码测试自己:

$url        = "http://www.youtube.com/e/fIL7Nnlw1LI&feature=related&bla=foo&test=bar";

$time1      = microtime(true);
for ($i = 0; $i < 1000000; $i++)
{
    explode("&", $url);
    $url    = $url[0];
}
$time2      = microtime(true);
echo ($time2 - $time1) . "\n";

$time1      = microtime(true);
for ($i = 0; $i < 1000000; $i++)
{
    $ampPos = strpos($url, "&");
    if ($ampPos !== false)
        $url = substr($url, 0, $ampPos);

}
$time2      = microtime(true);
echo ($time2 - $time1) . "\n";

给出以下结果:

2.47602891922
2.0289251804352

答案 4 :(得分:0)

您可以使用explode函数()来分割字符串。 $ url = explode(“&amp;”,$ needle)然后获取第一个数组元素。

答案 5 :(得分:0)

查看strpos函数,它将为您提供角色首次出现的位置 - 在您的情况下&amp;是一个字符串。从那里你可以使用substr来检索你想要的字符串。