Проверка, содержит ли строка "HTTP://"

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

// 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://" впереди.

Ответы

Ответ 1

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

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

if(strpos($URL, "http://") !== false)

Ответ 2

@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

Ответ 3

if(preg_match("@^http://@i",$String))
    $String = preg_replace("@(http://)[email protected]",'http://',$String);
else
    $String = 'http://'.$String;

Ответ 4

Вам нужно запомнить о 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

у вас есть проверка, содержит ли строка "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>

Наслаждайтесь парнями...

Ответ 6

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

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

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

if((substr_compare($URL,"http://",0,7)) === 0) $URL = $URL;
else $URL = "http://$URL";

Ответ 7

Однострочное решение:

$sURL = 'http://'.str_ireplace('http://','',$sURL);