PHP parse_url utf-8兼容函数 mb_parse_url

文章目录

简介

使用parse_url 对以下url进行解析时会出现乱码,(这种URL正常是被允许的,应该在后端进行命名)

$url = 'http://www.baidu.com/a/b/c/新建 Microsoft Word 文档.docx';
print_r(parse_url($url));

结果:
在这里插入图片描述

mb_parse_url

在(http://php.net/manual/zh/function.parse-url.php)中有相关的兼容UTF-8的方法,但是感觉不能完全兼容parse_url。

if (!function_exists('mb_parse_url')) {
    /**
     * UTF-8 aware parse_url() replacement.
     *
     * @param $url
     * @param int $component
     * @return mixed|string
     */
    function mb_parse_url($url, $component = -1)
    {
        $encodedUrl = preg_replace_callback(
            '%[^:/?#&=\.]+%usD',
            function ($matches) {
                return urlencode($matches[0]);
            },
            $url
        );

        $components = parse_url($encodedUrl, $component);

        if (is_array($components)) {
            foreach ($components as &$part) {
                if (is_string($part)) {
                    $part = urldecode($part);
                }
            }
        } else if (is_string($components)) {
            $components = urldecode($components);
        }

        return $components;
    }
}

结果:
在这里插入图片描述

并可以传入parse_url中的相关参数component,指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT 后,将返回一个 integer 的值)。
在这里插入图片描述

==================================
由于本人水平有限,文章在表述和代码方面如有不妥之处,欢迎批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值