【问题标题】:Format a website´s URL as a string with http:// upfront将网站的 URL 格式化为带有 h​​ttp:// 的字符串
【发布时间】:2011-07-20 06:31:59
【问题描述】:

我有一个允许自动链接网址的评论系统。我正在使用 cakephp,但解决方案更多的是 PHP。这就是正在发生的事情。

如果用户输入带有http://https:// 的完全限定网址,一切都很好。 但如果他们输入www.scoobydoobydoo.com,它就会变成http://cool-domain.com/www.scoobydoobydoo.com。基本上 cakephp 理解 http|https 是一个外部 url,所以它可以与 http|https 一起使用。

我的想法是在 url 上做一些 str 的东西,如果不存在,让它插入 http。不幸的是,无论我尝试什么只会让情况变得更糟。我是菜鸟 :) 任何帮助/指针表示赞赏。

谢谢

编辑:发布解决方案 sn-p。可能不是最好的,但感谢回答至少我有一些东西。

<?php
        $proto_scheme = parse_url($webAddress,PHP_URL_SCHEME);
    if((!stristr($proto_scheme,'http')) || (!stristr($proto_scheme,'http'))){
        $webAddress = 'http://'.$webAddress;
    }
?>

【问题讨论】:

    标签: php regex url string formatting


    【解决方案1】:

    试试parse_url函数:http://php.net/manual/en/function.parse-url.php

    我想这会对你有所帮助。

    【讨论】:

    • 啊我在同一个页面中使用它来获取域名..让我试试..就像我说的 -> noob 编辑:是的,这可能适用于 PHP_URLSCHEME。感谢您的快速回复
    • 在我的示例中,只是将此与手动检查是否存在 strpos() 进行了基准测试。我惊讶地发现它们的速度基本相同,但parse_url 更有用。我必须记住这一点。
    【解决方案2】:
    $url = "blahblah.com";
    // to clarify, this shouldn't be === false, but rather !== 0
    if (0 !== strpos($url, 'http://') && 0 !== strpos($url, 'https://')) {
       $url = "http://{$url}";
    }
    

    【讨论】:

    • 为什么投反对票?您是否在关闭代码之前对其进行了测试?
    • 啊,我在发布我的 sn-p 后看到了你的回复。是的,stripos 也可以工作,但事实是,如果我像这样使用 www.httpsux.com 它可能会失败?
    • 不。无论如何都可以正常工作。我肯定会坚持使用上面的 parse_url 示例,因为它很有用并且不会比 strpos'ing 慢很多。
    【解决方案3】:

    这是正则表达式:https://stackoverflow.com/a/2762083/4374834

    附言@Vangel,Michael McTiernan 的回答是正确的,所以请在你说某些事情可能会失败之前学习你的 PHP :)

    【讨论】:

      【解决方案4】:

      我也遇到过类似的问题,所以我创建了以下 php 函数:

          function format_url($url)
      {
          if(!$url) return null;
          $parsed_url = parse_url($url);
          $schema     = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : 'http://';
          $host     = isset($parsed_url['host']) ? $parsed_url['host'] : '';
          $path     = isset($parsed_url['path']) ? $parsed_url['path'] : '';
          return "$schema$host$path";
      }
      

      如果您格式化以下内容:format_url('abcde.com'),结果将为http://abcde.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多