我有一个输入你输入一个URL,我基本上想写一些php说,如果域包含“http://”然后保留它,否则如果没有然后将它添加到开头。 这就是我到目前为止......
$domain = $_POST["domain"];
if (strpos($domain, "http://")) {
return $domain;
} else {
$domain = "http://" . $domain;
}
这似乎不起作用..
如果它不包含http://。,它不会添加http://答案 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;
}