检查字符串是不是只包含 PHP 中的 URL

Posted

技术标签:

【中文标题】检查字符串是不是只包含 PHP 中的 URL【英文标题】:Check if a string contains nothing but an URL in PHP检查字符串是否只包含 PHP 中的 URL 【发布时间】:2013-02-07 07:44:59 【问题描述】:

我想知道这是否是检查字符串是否只包含 URL 的正确方法:

if (stripos($string, 'http') == 0 && !preg_match('/\s/',$string)) 
  do_something();

stripos() 检查字符串是否以“http”开头 preg_match() 检查字符串是否包含空格

如果不是这样,我假设该字符串只不过是一个 URL - 但这种假设是否有效?有没有更好的方法来实现这一点?

【问题讨论】:

the best way to check if a url is valid? 的可能重复项 【参考方案1】:

使用filter_var()

if (filter_var($string, FILTER_VALIDATE_URL))  
  // you're good

过滤器可以更加精细。 See the manual 了解更多信息。

【讨论】:

非常感谢! (我认为两个答案同时出现) 谢谢,这比 parse_url($string) 好,因为任何带有冒号 (:) 的东西都会被当作 url。效果好很多。希望有一种方法可以检测它是否是一个 url,即使它没有 http://。 这未能成功验证我在其中包含字符 å 的 URL - 但 URL 工作正常。 (使用 php 7.0) 这无法验证包含 % 字符的有效 URL【参考方案2】:

在 PHP 中有更好的方法来验证 URL http://www.php.net/manual/en/function.filter-var.php

if(filter_var('http://example.com', FILTER_VALIDATE_URL)))
    echo 'this is URL';

【讨论】:

【参考方案3】:

为了更安全地验证 URL(以及那些“非 ascii”的 URL),您可以

    检查过滤器(请务必检查manual 哪个过滤器适合您的情况)

    检查是否有 DNS 记录

    $string = idn_to_ascii($URL);
    if(filter_var($string, FILTER_VALIDATE_URL) && checkdnsrr($string, "A"))
        // you have a valid URL
     
    

【讨论】:

以上是关于检查字符串是不是只包含 PHP 中的 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个php字符串是不是只包含英文字母和数字?

PHP:检查我的字符串是不是只包含数字和“X”字符

如何使用 PHP switch 语句检查字符串是不是包含单词(但也可以包含其他单词)?

用 PHP 检查 URL 是不是有特定的字符串

检查字符串是不是包含 Velocity 中的特定子字符串

如何检查元素是不是可见并使用 JQuery 检查 URL 是不是包含字符串?