Проверка, содержит ли строка "HTTP://" - PullRequest
15 голосов
/ 20 декабря 2010

Мне интересно, почему этот код не работает:

// check to see if string contains "HTTP://" in front

if(strpos($URL, "http://")) $URL = $URL;
else $URL = "http://$URL";

Если он обнаружит, что строка не содержит "HTTP://", то последняя строка" HTTP://HTTP://foo.foo", если она содержит "http://" впереди.

Ответы [ 7 ]

36 голосов
/ 20 декабря 2010

Потому что он возвращает 0 для этой строки, которая оценивается как ложная.Строки индексируются нулем, и поэтому, если http:// находится в начале строки, позиция равна 0, а не 1.

Вам необходимо сравнить ее для строгого неравенства с логическим значением false, используя !==:

if(strpos($URL, "http://") !== false)
11 голосов
/ 20 декабря 2010

@ Метод BoltClock будет работать.

В качестве альтернативы, если вашей строкой является URL, вы можете использовать parse_url () , который будет возвращать компоненты URL в ассоциативном массиве, например:

print_r(parse_url("http://www.google.com.au/"));


Array
(
    [scheme] => http
    [host] => www.google.com.au
    [path] => /
)

scheme - это то, что вам нужно. Вы можете использовать parse_url () в сочетании с in_array, чтобы определить, существует ли http в строке URL.

$strUrl       = "http://www.google.com?query_string=10#fragment";
$arrParsedUrl = parse_url($strUrl);
if (!empty($arrParsedUrl['scheme']))
{
    // Contains http:// schema
    if ($arrParsedUrl['scheme'] === "http")
    {

    }
    // Contains https:// schema
    else if ($arrParsedUrl['scheme'] === "https")
    {

    }
}
// Don't contains http:// or https://
else
{

}

Edit:

Вы можете использовать $url["scheme"]=="http", как предложено @mario, вместо in_array(), это был бы лучший способ сделать это: D

5 голосов
/ 17 мая 2014

Вам нужно помнить о https://.Попробуйте это:

private function http_check($url) {
    $return = $url;
    if ((!(substr($url, 0, 7) == 'http://')) && (!(substr($url, 0, 8) == 'https://'))) {
        $return = 'http://' . $url;
    }
    return $return;
} 
5 голосов
/ 03 июля 2013
if(preg_match("@^http://@i",$String))
    $String = preg_replace("@(http://)+@i",'http://',$String);
else
    $String = 'http://'.$String;
1 голос
/ 31 декабря 2013

у вас есть проверка, содержит ли строка «HTTP://” ИЛИ Нет

Ниже код отлично работает.

<?php 
$URL = 'http://google.com';
$weblink =   $URL; 
    if(strpos($weblink, "http://") !== false){ }
    else { $weblink = "http://".$weblink; }
 ?>
  <a class="weblink" <?php if($weblink != 'http://'){ ?> href="<?php echo $weblink; ?>"<?php } ?> target="_blank">Buy Now</a>

Наслаждайтесь, ребята ...

0 голосов
/ 24 августа 2014

Однолинейное решение:

$sURL = 'http://'.str_ireplace('http://','',$sURL);
0 голосов
/ 20 января 2013

Вы можете использовать substr_compare () [PHP Docs] .

Будьте осторожны с тем, что возвращает функция.Если строки совпадают, возвращается 0. Для других возвращаемых значений вы можете проверить документы PHP.Также есть параметр для проверки чувствительных к регистру строк.Если вы укажете TRUE, он будет проверять наличие заглавных букв.

Таким образом, вы можете просто написать в вашей задаче следующее:

if((substr_compare($URL,"http://",0,7)) === 0) $URL = $URL;
else $URL = "http://$URL";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...