2011-06-19 115 views
2

爲什麼不刪除字符串的http://?php刪除字符串的一部分

$rurl = 'http://www.google.com'; 
$httpposi = strpos($rurl,'://'); 
echo $httpposi; 
if($httpposi === true) { 
$url=substr($rurl, strpos($rurl, '://') + 3); 
echo $url; 
} else { 
$url=$rurl; 
echo '3'.$url.'2'; 
} 

echo $url; 

回答

3

相反的:

if($httpposi === true) { 

你需要:

if($httpposi !== false) { 

,因爲如果它字符串中找到,它會返回一個整數的偏移,你是做一個嚴格的比較,嚴格地說一個非零的正整數不等於布爾值true

8 == true // true 
8 === true // false, because 8 is not a boolean 
0 == true // false, but we need to know if the needle is at position 0 

這樣:

0 !== false // true, string was found 
8 !== false // true, string was found 
false !== false // false, string was not found 

如果序列在字符串的開頭找到,falsy 0將被退回,因此需要嚴格比較false知道,它沒有被根本找不到。

+0

卡里姆,如果我正在尋找的東西是在位置0,你的方法仍然工作? – David19801

+0

@ David19801 - 是的,我已經更新了一些解釋。將嘗試澄清更多。 – karim79

0

變化if($httpposi === true) {if($httpposi) {if($httpposi == true) {,因爲$httpposi = 4===true

+0

糟糕。我完全忘了'!== false' ... – JiminP

1

其他一些已發佈:不要比較$httpposi與布爾值! strpos函數的返回值是一個整數值,如果它找到了發生的,但是如果找不到傳入的字符串,則返回false0""

欲瞭解更多信息,請看PHP.net docs

1

或者你可以使用的preg_replace來代替,而擺脫這個問題的另一種方式:

$url=preg_replace('~^https?://~i','','http://www.google.com') 

迎合了HTTPS也是如此。只要刪除[s]?如果那不是你想要的。 /我是忽略大小寫。

+0

謝謝,正斜槓是當然不好的選擇.. :-) 圍繞s的括號我會保持自己的可讀性。 – Bing