首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 解析含中文 URL 函數:path 部分 rawurlencode 實戰封裝

     編輯:PHP 相關知識

PHP 解析含中文 URL 函數:path 部分 rawurlencode 實戰封裝

問題場景:URL path 包含中文(如 https://example.com/搜索/關鍵詞),直接用 file_get_contents/cURL/wget 請求會返回 404。瀏覽器自動編碼,但伺服端原始請求需手動處理。

解決方案:僅對 path 分段編碼

function urlConvert($url) {

$pathArr = array();

$modules = parse_url($url);

$path = $modules['path'];

$pathSplit = explode('/', $path);

foreach ($pathSplit as $row) {

$pathArr[] = rawurlencode($row); // 關鍵:逐段編碼

}

$urlNew = $modules['scheme'] . "://" . $modules['host'] . implode('/', $pathArr);

return $urlNew;

}

關鍵點解析

  • parse_url() 解析 URL 結構,提取 scheme、host、path
  • explode('/', $path) 將 path 拆分為段落(保留層級結構)
  • rawurlencode() **嚴格遵循 RFC 3986**,空格編為 %20(而非 +),適合 path 編碼
  • implode('/', ...) 重組 path,保持目錄結構
  • **不編碼 query string**(parse_url 返回的 query 部分),查詢參數編碼邏輯不同

適用範圍與限制

場景是否適用說明
Path 含中文/特殊字符✅核心解決場景
Query 參數含中文❌需用 http_build_query() 處理 query 部分
完整 URL 含中文域名❌需 Punycode 編碼 (idn_to_ascii())
Fragment (#錨點) 含中文❌瀏覽器端處理,伺服端不接收

生產環境建議

  • 統一 URL 生成邏輯:所有動態 path 段落經 rawurlencode() 後再拼裝
  • 輸入驗證:對用戶提交的 URL 先 parse_url 再重組,防注入
  • 考慮使用成熟庫(如 league/uri、guzzlehttp/psr7)替代手工拼裝
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved