如何检查字符串是否为有效URL 时间:2014-10-24 作者:henrywright WordPress提供了一个有用的函数,名为is_email() 检查给定的电子邮件地址是否有效。是否有类似的功能可用于检查URL是否有效?我试过了is_url() 但那只是我一厢情愿的想法。参考号:http://codex.wordpress.org/Function_Reference/is_email 7 个回复 最合适的回答,由SO网友:shanebp 整理而成 使用本机php函数Filter Validatorif (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的选项。filter_var() 使用FILTER_VALIDATE_URL PHP中的过滤器不适用于包含非ASCII字符的国际化域名,例如http://스타벅스코리아.com. 它还有一些其他问题,正如David Müller, 喜欢接受http://example.com/"><script>alert("xss")</script> 作为有效的URL,即使它显然是恶意的。wp_http_validate_url() 在WordPress中可能会做得更好,尽管它专门用于HTTP API,而不是URL的一般验证。但它仍然没有解决前面讨论的两个具体问题。preg_match() 在PHP中,它可能适合您,也可能不适合您。编写正则表达式来预测每一种可能的情况并不总是最理想的解决方案,而且有时也不可能做到普遍正确。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(), 实际上,不要检查电子邮件地址是否有效,除非它符合规范。我很乐意为许多对我的电子邮件地址毫无意义的网站提供的电子邮件是a@b.com这是一致的地址,但不太可能有人使用它。签出URL最好通过ping来完成。您可以尝试检查一致性,但从理论上讲,编码url的内容几乎没有限制。 结束 文章导航