如何检查字符串是否为有效URL

时间:2014-10-24 作者:henrywright

WordPress提供了一个有用的函数,名为is_email() 检查给定的电子邮件地址是否有效。是否有类似的功能可用于检查URL是否有效?

我试过了is_url() 但那只是我一厢情愿的想法。

参考号:http://codex.wordpress.org/Function_Reference/is_email

7 个回复
最合适的回答,由SO网友:shanebp 整理而成

使用本机php函数Filter Validator

if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
    die(\'Not a valid URL\');
}

SO网友:orionrush

我知道这是一个老帖子,但对于任何访问它的人来说,它也值得考虑WP功能esc_url()esc_url_raw(), 后者对于数据库条目等是安全的,因为它不编码实体。esc_url() 对实体进行编码,因此有利于向用户显示。

In the source 你可以看到esc_url() 检查允许的协议和结构的白名单,以避免FILTER_VALIDATE_URL 由@tobltobs的链接指出。

SO网友:Ashish Shrestha

我发现wp_http_validate_url 在处理我的项目时,检查字符串是否在有效URL中非常方便。

从这里引用:https://developer.wordpress.org/reference/functions/wp_http_validate_url/

例如:

$val = \'http://somevalidurl.com\';
if ( wp_http_validate_url( $val ) ) {

    // It\'s valid URL;

} else {

    // It\'s NOT valid URL;

}
如果URL有效,则返回URL本身,否则返回false。

SO网友:Daniel

在我看来,最好使用wp_http_validate_url.

Example 1:

filter_var( \'//website.com\', FILTER_VALIDATE_URL )
返回false。

Example 2:

wp_http_validate_url( \'//website.com\' )
返回url。

当你不知道网站是使用https还是http协议时,最好使用“/”

  • wp_http_validate_url 由WP开发人员改进(更具体)wp_http_validate_url. 你不能用钩子filter_var.
  • 参考:https://developer.wordpress.org/reference/functions/wp_http_validate_url/

    参考号:https://www.php.net/manual/en/function.filter-var.php

    SO网友:arafat

    让我们从显而易见的URL开始讨论在WordPress中验证URL的选项。

    1. filter_var() 使用FILTER_VALIDATE_URL PHP中的过滤器不适用于包含非ASCII字符的国际化域名,例如http://스타벅스코리아.com. 它还有一些其他问题,正如David Müller, 喜欢接受http://example.com/"><script>alert("xss")</script> 作为有效的URL,即使它显然是恶意的。

    2. wp_http_validate_url() 在WordPress中可能会做得更好,尽管它专门用于HTTP API,而不是URL的一般验证。但它仍然没有解决前面讨论的两个具体问题。

    3. preg_match() 在PHP中,它可能适合您,也可能不适合您。编写正则表达式来预测每一种可能的情况并不总是最理想的解决方案,而且有时也不可能做到普遍正确。

    4. esc_url_raw() 在WordPress中,它并不是用来验证URL的,但它似乎比其他浏览器做得更好。它将适用于非ASCII字符,并解决前面讨论的其他问题。这个函数基本上会通过删除或更改任何无效或恶意的字符来清理任何作为URL保存在WordPress数据库中的字符串。因此,如果经过清理的版本与未经清理的版本不同,可以很有把握地说URL无效,可能最重要的是不安全。

      以下是如何使用esc_url_raw() 通过利用strtolower() 函数使验证不区分大小写。

      function validateUrl($url) {
          if ( strtolower(esc_url_raw($url)) === strtolower($url) ) {
              return $url;
          } else {
              return false;
          }
      }
      

    SO网友:thespacecamel

    为了确保用户提交的URL有效且安全,以便存储和以后显示,我建议

    esc_url_raw($url) === $url
    
    esc_url_raw(), 像上面提到的@orionrush一样,通过从URL中删除任何无效或恶意的内容来清理URL。所以,如果这个字符串没有任何无效或恶意的内容,那么就可以了。

    Eg公司

    if( esc_url_raw($url) === $url ) {
       // URL is valid. Use it...
    } else {
       // URL is invalid or malicious. Don\'t use it...
    }
    
    我在这里写了一篇更长的博文:https://cmljnelson.wordpress.com/2018/08/31/url-validation-in-wordpress/

    SO网友:Mark Kaplun

    is_email(), 实际上,不要检查电子邮件地址是否有效,除非它符合规范。我很乐意为许多对我的电子邮件地址毫无意义的网站提供的电子邮件是[email protected]这是一致的地址,但不太可能有人使用它。

    签出URL最好通过ping来完成。您可以尝试检查一致性,但从理论上讲,编码url的内容几乎没有限制。

    结束

    相关推荐

    AJAX值转换为PHP变量?

    我刚开始玩Wordpress,我对AJAX方面有个问题。我想我理解了AJAX前端到服务器端的处理、后端到字体端的工作原理。但是,我不太清楚如何将前端数据导入后端,然后将该数据用于其他用途(不向前端返回值)。我一直在阅读不同的帖子,这是一种从未完全充实过的东西。理想情况下,我会将前端数据转换为PHP变量,该变量可以在不同的PHP函数中调用(不是在function.PHP中完成,而是在自定义插件PHP文件中完成)。这可能吗?如果是的话,我很好奇我会怎么做。如果没有,将前端数据导入后端进行操作的最佳方式是什么?