【问题标题】:Parsing a valid url in php在php中解析一个有效的url
【发布时间】:2011-08-04 18:43:57
【问题描述】:

我有这个正则表达式来过滤掉网址,但它也过滤掉了一些无效的网址

$regexUrl = "((https?|ftp)\:\/\/)?"; // 方案 $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;? &=\$_.-]+)?@)?"; // 用户和通行证 $regexUrl .= "([a-zA-Z0-9-.]*)\.([a-zA-Z]{2,3})"; //主机或IP $regexUrl .= "(\:[0-9]{2,5})?"; // 港口 $regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // 小路 $regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // 获取查询 $regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // 锚

例如“http://...XYZ”也被上述正则表达式过滤,但这是无效的 url。

任何帮助将不胜感激

【问题讨论】:

  • 什么是对您来说有效的 URL?你能再详细说明一下吗?哪些协议对您有效?哪些服务器名称?哪些港口?路径重要吗?授权是否有效?
  • PHP validation/regex for URL 的可能重复项
  • 为什么 http://...XYZ 是一个无效的 url?并非所有域都以www 开头并以.com 结尾。例如,localhost 是与 www.xyz.com 一样的有效域。 theduplicatequestion 也是如此。

标签: php regex url


【解决方案1】:
$valid = parse_url($url);

你在找什么?

【讨论】:

  • 不,我正在寻找类似“这是一个很棒的网站,访问 www.xyz.com”之类的内容,现在我需要从消息中过滤掉这个“www.xyz.com”,但是上面的正则表达式没有过滤无效的“如问题所示”
  • 就LOL而言,该函数实际上称为parse_url,顺便说一句,当您在示例URL上运行示例时,真正的LOL就在这里:codepad.org/mbiMPUuu
  • 来自文档:这个函数不是为了验证给定的 URL,它只是把它分解成上面列出的部分。部分 URL 也被接受,parse_url() 会尽力正确解析它们。
  • @Michael:我知道不是……但是如果 URL 有效,您必须进行 CURL 或其他网络调用才能获取
  • @genesis "validate" 在这种情况下并不意味着 URL 映射到一个有效的主机,而是该模式是有效的。 parse_url() 将尽职尽责地将错误的 URL “http://...XYZ”解析为 [scheme] => http [host] => ...XYZ
【解决方案2】:

在您的主机或 IP 行中,将 * 更改为 + 并从第一个 [] 中删除 .

$regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; // Host or IP 

这样做的效果是需要(带 +)第一个 [] 中的一些字符,并且不允许其中有 .,因为 . 由紧随其后的 \. 处理(并且需要)第一组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多