PHP 解析带中文字符 URL 函数

小鹿同学
小鹿同学
发布时间:2026-10-14 | 4人浏览过
原创

在处理网页应用程序时,包含中文字符的 URL 经常导致 curl、wget 等工具返回 404 错误。为解决这一问题,本文将展示一个 PHP 辅助函数,利用 parse_url 和 rawurlencode 对 URL 中的路径部分进行精确编码,确保含中文链接能够被正确识别和访问。

问题分析与准备条件

当 URL 路径(path)中包含未编码的中文字符时,服务器通常无法将其映射到正确的资源,从而导致请求失败。虽然查询参数中的中文可以通过 ?key=值 形式处理,但路径部分的中文同样需要标准化编码。本方案适用于需要动态生成或修正含中文路径的请求场景。

真实操作顺序

第1步:获取并分析原始 URL

使用 PHP 内置的 parse_url 函数将目标 URL 拆解为各个组成部分(如 scheme、host、path 等),以便单独处理路径部分。

function urlConvert($url) {
    // 1. 解析 URL 获取各部分
    $modules = parse_url($url);
    // 提取 path 部分进行处理
    if (!isset($modules['path'])) {
        return false;
    }
    $path = $modules['path'];
}

第2步:分割路径并逐段编码

将路径按 / 符号拆分为数组,遍历每个片段,使用 rawurlencode() 函数对每段路径进行百分号编码。这一步能正确处理中文字符及潜在的特殊符号,同时保留非路径字符的安全分隔符。

// 2. 分割路径数组
$pathSplit = explode('/', $path);
$pathArr = array();

// 3. 逐段编码
foreach ($pathSplit as $row) {
    $pathArr[] = rawurlencode($row);
}

第3步:重新拼接 URL 并返回结果

使用 implode() 将编码后的路径数组重新组合,并拼回原始的协议(scheme)和主机名(host),最终形成符合 HTTP 标准的新 URL。

// 4. 重新拼接完整 URL
$urlNew = $modules['scheme'] . '://' . $modules['host'] . implode('/', $pathArr);

return $urlNew;
}

完整的函数代码可直接集成至现有项目:

function urlConvert($url) {
    $modules = parse_url($url);
    if (!isset($modules['path'])) {
        return false;
    }
    
    $pathSplit = explode('/', $modules['path']);
    $pathArr = array();
    
    foreach ($pathSplit as $row) {
        $pathArr[] = rawurlencode($row);
    }
    
    $urlNew = $modules['scheme'] . '://' . $modules['host'] . implode('/', $pathArr);
    return $urlNew;
}

完成判断

调用该函数后,返回的 URL 路径部分的所有中文及特殊字符均已转换为百分号编码格式(例如 "你好" 变为 "%E4%BD%A0%E5%A5%BD")。此时将此 URL 用于 curl、file_get_contents 或其他 HTTP 客户端发起请求,应不再出现因编码不规范导致的 404 错误。

简要总结

对于包含中文的 URL 解析问题,核心在于对路径部分的精确编码。通过 parse_url 分离结构,再用 rawurlencode 逐段处理,最后重组,是解决此类兼容性问题的有效手段。以上就是 PHP 中解析带中文字符 URL 函数的详细内容,更多关于 PHP 网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表