如果http://在字符串中则保留,否则如果不添加它

时间:2011-05-24 14:23:35

标签: php

我有一个输入你输入一个URL,我基本上想写一些php说,如果域包含“http://”然后保留它,否则如果没有然后将它添加到开头。 这就是我到目前为止......

$domain = $_POST["domain"];

if (strpos($domain, "http://")) {
return $domain;
} else {
$domain = "http://" . $domain;
}

这似乎不起作用..

如果它不包含http://。

,它不会添加http://

8 个答案:

答案 0 :(得分:6)

你忘了退回$ domain。

$domain = $_POST["domain"];

if (strpos($domain, "http://") !== false) {
return $domain;
} else {
return "http://" . $domain;
}

答案 1 :(得分:5)

由于字符串以http://开头,strpos将返回0,这将评估为false。

将if语句更改为:

if(strpos($domain, "http://") !== FALSE){

答案 2 :(得分:4)

  

“http://”然后保留它,否则如果没有则将其添加到开头。

如何添加添加它怎么样?我发现这更容易:

<?php
$url = 'http://www.google.com';
echo 'http://' . preg_replace( '~^http://~', '', $url );

答案 3 :(得分:2)

阅读manual

  

此函数可能返回布尔值   FALSE,但也可能返回   非布尔值,其值为   FALSE,例如0或“”。请阅读   关于布尔人的部分了解更多   信息。 使用===运算符   测试这个的返回值   功能

答案 4 :(得分:2)

这是因为strpos将返回字符串中字符串的位置。 在你的网址中,即0.这等于假。严格检查 - 添加=== false。

答案 5 :(得分:1)

if (strpos($domain, "http://") !== false) {
//return substr($domain,7); Thanks Rocket. 
return $domain;
} else {
return "http://" . $domain;
}

答案 6 :(得分:1)

我知道派对有点晚了,但我更喜欢这种做法:

if (!preg_match('#^http[s]{0,1}://#', $input)) {
    $input = 'http://' . $input;
}

这将保留https://地址,而不是以http://https://www.mysite.com结尾。您还可以进一步编辑它以删除https://如果您有不使用https地址的规则。

我知道最初的问题并没有要求这个,但我认为在大多数情况下考虑很重要,并希望能帮助那些来看的人。

答案 7 :(得分:0)

使用strpos()时要小心。当在字符串的开头找到'http://'时,它将返回0,导致if语句意外失败。您需要检查返回的类型以确定:

$domain = $_POST["domain"];

if (FALSE !== strpos($domain, "http://")) {
    return $domain;
} else {
    return "http://" . $domain;
}