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

发布于 2024-11-09 13:50:43 字数 304 浏览 2 评论 0原文

我有一个输入,您输入一个 URL,我基本上想编写一些 php 来表示如果域包含“http://”,则保留它,否则如果不包含,则将其添加到开头。 这就是我到目前为止所拥有的......

$domain = $_POST["domain"];

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

这似乎不起作用......

如果它不包含http://,它就不会添加http://。

I have a input that you enter a URL, i basically want to write some php that says if the domain containts "http://" then leave it be, else if not then add it to the beginning.
This is what I have so far...

$domain = $_POST["domain"];

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

This doesnt seem to work..

it doesnt add the http:// on if it doesnt contain http://.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

谜泪 2024-11-16 13:50:43

您忘记返回 $domain。

$domain = $_POST["domain"];

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

you forgot to return $domain.

$domain = $_POST["domain"];

if (strpos($domain, "http://") !== false) {
return $domain;
} else {
return "http://" . $domain;
}
慢慢从新开始 2024-11-16 13:50:43

由于字符串以 http:// 开头,因此 strpos 将返回 0,其计算结果为 false。

将 if 语句更改为:

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

Since the string starts with http://, strpos will return 0, which will evaluate to false.

Change the if statement to:

if(strpos($domain, "http://") !== FALSE){
说不完的你爱 2024-11-16 13:50:43

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

无论如何添加如何?我发现这样更容易:

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

"http://" then leave it be, else if not then add it to the beginning.

How about adding adding it regardless? I find that to be easier:

<?php
$url = 'http://www.google.com';
echo 'http://' . preg_replace( '~^http://~', '', $url );
半城柳色半声笛 2024-11-16 13:50:43

阅读手册

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

read manual:

This function may return Boolean
FALSE, but may also return a
non-Boolean value which evaluates to
FALSE, such as 0 or "". Please read
the section on Booleans for more
information. Use the === operator for
testing the return value of this
function.

窝囊感情。 2024-11-16 13:50:43

这是因为 strpos 将返回字符串在字符串中的位置。
在你的 url 中,它是 0。这等于 false。进行严格检查 - add === false。

That is because strpos will return the location of the string, within the string.
In your url, that is 0. Which equals to false. Make it a strict check - add === false.

暗恋未遂 2024-11-16 13:50:43
if (strpos($domain, "http://") !== false) {
//return substr($domain,7); Thanks Rocket. 
return $domain;
} else {
return "http://" . $domain;
}
if (strpos($domain, "http://") !== false) {
//return substr($domain,7); Thanks Rocket. 
return $domain;
} else {
return "http://" . $domain;
}
沉鱼一梦 2024-11-16 13:50:43

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

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

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

我知道最初的问题并没有要求这个,但我认为在大多数情况下考虑这一点很重要,并且希望能够帮助其他前来寻找的人。

I know this is a bit late to the party, but I prefer this approach:

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

This will preserve a https:// address, and not have you ending up with http://https://www.mysite.com. You could also further edit it to strip out https:// if you had a rule for not using https addresses.

I know the original question didn't ask for this, but I think it's important to consider in most situations, and will hopefully help someone else who comes looking.

我三岁 2024-11-16 13:50:43

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

$domain = $_POST["domain"];

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

Use caution when using strpos(). It will return 0 when 'http://' is found at the beginning of the string, causing your if statement to fail unexpectedly. You will want to check the type of the return to be sure:

$domain = $_POST["domain"];

if (FALSE !== strpos($domain, "http://")) {
    return $domain;
} else {
    return "http://" . $domain;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文