为什么这不会删除字符串的http://
$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;
答案 0 :(得分: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
如果在字符串的开头找到序列,则会返回虚假0
,因此需要严格比较false
才能知道它根本没有找到。< / p>
答案 1 :(得分:1)
正如其他一些人已经发布的那样:不要将$httpposi
与布尔值进行比较! strpos
函数的返回值是一个整数值,如果它已找到出现,但如果找不到,则可以返回false
,0
或""
传递了字符串。
有关详细信息,请查看PHP.net docs!
答案 2 :(得分:1)
或者您可以使用preg_replace来解决问题:
$url=preg_replace('~^https?://~i','','http://www.google.com')
也适用于https。只需删除[s]?如果这不是你想要的。 / i是为了忽略大小写。
答案 3 :(得分:0)
if($httpposi !== false) {
答案 4 :(得分:0)
将if($httpposi === true) {
更改为if($httpposi) {
或if($httpposi == true) {
,因为$httpposi = 4
不是===
到true
。