2015-04-27 2 views
0

У меня есть функция, которая используется для добавления http:// к URL, которые не имеют http:// вроде как нижедобавить HTTP к URL

function addhttp($url) { 
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) { 
     $url = "http://" . $url; 
    } 

return $url; 
} 

Моя проблема в том,

Если я прохожу URL с &, строка после & будет пропущен, например:
https://www.example.com/Welcome/Default.aspx?scenarioID=360&pid=3308&treeid=1000 Возвращает

https://www.example.com/Welcome/Default.aspx?scenarioID=360

Я теряю &pid=3308&treeid=1000 Эта часть, как исправить эту ошибку ??

+0

я правильно возвращаюсь, но как и где вы пропускание URL? –

+0

Это на самом деле функция codeigniter, и это будет выглядеть как $ url = $ this-> addhttp ($ _ GET ['u']); – Shin

+0

hmm ok, но я действительно ничего не теряю, когда запускаю ваш код. http://sandbox.onlinephpfunctions.com/code/67eb0e9fe39041db0ebb51ea975daa7fa424f818 –

ответ

2

Я не могу воспроизвести ошибку, используя PHP 5.5. Однако лично я не люблю использовать регулярное выражение, когда есть встроенные функции, выполняющие эту работу. Следующее должны хорошо работать в качестве замены для регулярного выражения ~^(?:f|ht)tps?://~i:

<?php 
function addhttp($url, $https=false) { 
    $protocols = ['https://', 'http://', 'ftps://', 'ftp://']; 
    $heystack = strtolower(substr($url, 0, 8)); 
    foreach ($protocols as $protocol) { 
     if (strpos($heystack, $protocol) === 0) { 
      return $url; 
     } 
    } 
    return ($https ? 'https://' : 'http://') . $url; 
} 

$url = 'www.example.com/Welcome/Default.aspx?scenarioID=360&pid=3308&treeid=1000'; 
// for http:// 
echo addhttp($url); 
// for https:// 
echo addhttp($url, true); 

я добавил дополнительный параметр здесь, если вам не нравится это просто взять и удалить тройное выражение (<expression> ? true : false).

Если вам нужно получить значение URL см this question

+1

Другой встроенной функцией будет 'parse_url ('google.be', PHP_URL_SCHEME)! == null' – DarkBee

+0

Да, хорошо звоните @DarkBee. Но похоже, что в поведении функции post PHP 5.4.7 происходит изменение поведения в отношении части схемы отсутствующего URL-адреса. посмотрите второй пример на странице руководства: http://php.net/manual/en/function.parse-url.php – robbmj

Смежные вопросы