【问题标题】:Separating urls from a string?从字符串中分离网址?
【发布时间】:2011-04-19 18:23:00
【问题描述】:

我有一个文本框用户配置文件区域,用户将在其中放置 rss url,以“return”或每行的每个 URL 分隔。然后它将被保存到数据库中。现在如何获取数组中的所有 url?

我知道这是一个非常基本的问题。在网上搜索了很多东西,我很困惑。我认为很少的讨论会有所帮助。

我还想进行一些验证,例如如果用户没有在 url 之前放置任何 http://,代码将添加它。并忽略 http:// 协议以外的 URL。

我的 CMS 是 Wordpress,所以如果有任何内置功能可以帮助我,请告诉我。

【问题讨论】:

    标签: php string wordpress url


    【解决方案1】:

    使用explode 函数后,您需要执行一个foreach 来进行您正在寻找的验证

    $urlArray = explode("\r", $_POST["textBox"])
    if(!empty($urlArray))
    {
        foreach($urlArray as $url)
        {
             //Do your regex checking here
        }
    }
    

    如果 RegEx 太复杂(尽管我真的建议学习它),您也可以考虑使用 substr 来评估每个 html 行,但这取决于您的技能水平,尽管这是一个不太强大的版本。一个例子是:

    $htmlString = substr($url, 0, 7);
    if($htmlString != "http://")
    {
      $url = "http://" . $url;
    }
    

    【讨论】:

    • 好主意;您的回答完成了答案。 :)
    • 我不知道有什么特别棒的网站,但基本的谷歌搜索应该能够为 RegEx 教程找到一些东西。 RegEx 是正则表达式的缩写。您需要查找 PHP 的 preg_match 函数以了解如何在您的 php 代码中实现正则表达式,但要学习正则表达式本身,请查看任何基本教程,例如:gnosis.cx/publish/programming/regular_expressions.html
    • 谢谢!刚刚做了一些谷歌搜索。现在会读一些文章。一旦我在代码中尝试您的建议,我会立即通知您。 :)
    【解决方案2】:

    使用PHP的explode函数:

    $urlArray = explode("\r", $POST["URlsInputName"])
    

    这将返回一个 URL 数组,假设 $POST["URlsInputName"] 包含您的输入框的值,其中包含由回车符分隔的 URL。

    【讨论】:

    • 分隔符可能需要是“\n”甚至是“\r\n”...你需要测试一下。
    【解决方案3】:

    下面是一个基本块:

    $text_box_text =

    由于这是用户输入,您需要更加偏执。更多的错误检查总是有序的:

    preg_grep( '|^http://[-\w][-.\w]+/|', ... ) #确保主机名有效

    还有更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2016-11-27
      • 2022-11-23
      相关资源
      最近更新 更多