Нужно удалить все, что есть после письма с PHP - PullRequest
0 голосов
/ 06 августа 2011

У меня есть эта ссылка: http://www.youtube.com/e/fIL7Nnlw1LI&feature=related

Мне нужен способ в PHP, чтобы полностью удалить все, что находится после КАЖДОГО & в ссылке.

Так оно станет: http://www.youtube.com/watch?v=fIL7Nnlw1LI

Внимание, это может иметь более одного &

Все, что после EACH &, & включено, должно быть удалено из строки

Как это сделать вPHP

Ответы [ 6 ]

3 голосов
/ 06 августа 2011

Как я уже писал в rpeeve ваш вопрос, вы можете использовать этот 1-строчный скрипт:

$str = strtok($str,'&');
3 голосов
/ 06 августа 2011

Вы можете сделать это ::

$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 голос
/ 06 августа 2011
$url = "http://www.youtube.com/e/fIL7Nnlw1LI&feature=related";
$ampPos = strpos($var, '&');
if ($ampPos !== false)
{
   $url = substr($url, 0, $ampPos);
}

Не используйте разнесение, регулярные выражения или любой другой жадный алгоритм, это пустая трата ресурсов.

РЕДАКТИРОВАТЬ (добавлена ​​информация о производительности):

В документации 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
1 голос
/ 06 августа 2011

Вы можете объединить strpos с substr:

$spos = strpos($s, "&");
$initial_string = $spos ? substr($s, 0, $spos) : $s;
0 голосов
/ 06 августа 2011

Посмотрите на функцию strpos , которая покажет вам, где находится первое вхождение символа - в вашем случае & в строке. После этого вы можете использовать substr для извлечения фрагмента нужной вам строки.

0 голосов
/ 06 августа 2011

Вы можете использовать функцию разнесения (), чтобы разбить строку.$ url = explode ("&", $ needle) и затем получить первый элемент массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...