【问题标题】:if http:// is in string then leave it, else if not add it如果 http:// 在字符串中则保留它,否则如果不添加它
【发布时间】:2013-10-25 11:06:40
【问题描述】:

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

$domain = $_POST["domain"];

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

这似乎不起作用..

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

【问题讨论】:

  • 为什么一个返回$domain,另一个改变它的值?

标签: php


【解决方案1】:

您忘记返回 $domain。

$domain = $_POST["domain"];

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

【讨论】:

    【解决方案2】:

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

    将if语句改为:

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

    【讨论】:

      【解决方案3】:

      "http://" 然后保留它,否则将其添加到开头。

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

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

      【讨论】:

      • 请解释一下?
      【解决方案4】:

      阅读manual:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:
          if (strpos($domain, "http://") !== false) {
          //return substr($domain,7); Thanks Rocket. 
          return $domain;
          } else {
          return "http://" . $domain;
          }
          

          【讨论】:

          • != false 应该是 !== false。如果字符串以http:// 开头,strpos 将返回0,其计算结果为false
          • substr 电话是怎么回事?
          • 是因为一个误会,这里使用了substr函数来去除http字符,但是我猜AJFMEDIA不希望它被去除。所以我要编辑答案!
          【解决方案7】:

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

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

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

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

            • 您好,strpos 将返回第一次出现的位置,如果不存在则返回 false。这意味着它将永远返回 bool true。
            • strpos 从不返回TRUE。如果找不到,它将返回字符串的位置或FALSE
            • 感谢您的收获。已更正。
            猜你喜欢
            • 2014-01-19
            • 1970-01-01
            • 2012-09-20
            • 1970-01-01
            • 2021-06-25
            • 2012-04-24
            • 1970-01-01
            • 1970-01-01
            • 2018-01-15
            相关资源
            最近更新 更多