Проверка, содержит ли строка "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: //».

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

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

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

@ Метод 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 { } 

Редактировать:

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

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

Вы должны помнить о https:// . Попробуй это:

 private function http_check($url) { $return = $url; if ((!(substr($url, 0, 7) == 'http://')) && (!(substr($url, 0, 8) == 'https://'))) { $return = 'http://' . $url; } return $return; } 

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

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

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

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

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

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

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

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