PHP中是否有parse_url等效函数或自定义解析url函数?

PHP中是否有parse_url等效函数或自定义解析url函数?,php,regex,parse-url,Php,Regex,Parse Url,我正在压缩一些CSS和JS文件,很少有方法使用parse_url来获取url组件。刚刚发现在PHP5.3.28之前没有主机,我的压缩功能非常依赖它来获得正确的路径 所以在PHP5.3.28上 Array ( [path] => //fonts.googleapis.com/css [query] => family=Open+Sans ) 和5.3.28> Array ( [host] => fonts.googleapis.com [path

我正在压缩一些CSS和JS文件,很少有方法使用parse_url来获取url组件。刚刚发现在PHP5.3.28之前没有主机,我的压缩功能非常依赖它来获得正确的路径

所以在PHP5.3.28上

Array
(
    [path] => //fonts.googleapis.com/css
    [query] => family=Open+Sans
)
和5.3.28>

Array
(
    [host] => fonts.googleapis.com
    [path] => /css
    [query] => family=Open+Sans
)
任何人都可以发布一个可能的替换函数或实际的5.3.28>parse_url或我可以使用的正则表达式


感谢您的帮助

如其中一条评论所述,在5.4.7版本之前,如果没有该方案,PHP将无法识别URL的主机部分。检查问题以获得一些可能的解决方案,其中之一是手动添加默认方案,或者,您可以尝试此示例

$url = '//fonts.googleapis.com/css?family=Open+Sans';
$url_parts = parse_url( $url );

if ( !isset( $url_parts['host'] ) ) {
    $part = ( isset( $url_parts['path'] ) ? $url_parts['path'] : '' ) . ( isset( $url_parts['query'] ) ? '?' . $url_parts['query'] : '' ) . ( isset( $url_parts['fragment'] ) ? '#' . $url_parts['fragment'] : '' );    
    $host = strstr( $url, $part, true );
    $url_parts['host'] = substr( $host, strpos( $host, '//' ) + 2 );
}

主机
对于以前的PHP版本也是分开的。你只是没有按要求通过考试。后来的版本只有在缺少scheme前缀的情况下才变得宽松。我想你应该从第90行开始看。我的建议是:不要使用任何低于5.3的php版本。最好使用5.4或5.5。除了性能和bug修复之外,还有安全修复和更棒的功能。