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

PHP Curl 抓取遠端內容:URL 中文編碼完整指南

     編輯:PHP 相關知識

前言

使用 PHP Curl 抓取含中文參數的 URL 時,正確的編碼處理至關重要。PHP 提供 urlencode() 與 rawurlencode() 兩個函數,兩者差異在於空格編碼:前者編為 +,後者編為 %20。關鍵在於僅對需編碼的部分(如查詢參數值)編碼,避免破壞 URL 結構(如冒號、斜線被轉義)。

函數差異示例

$str = '博 客';
echo urlencode($str);   // 輸出:%B2%A9+%BF%CD
echo rawurlencode($str); // 輸出:%B2%A9%20%BF%CD

實戰:正確編碼 URL 查詢參數

方法一:拆解 URL 僅編碼參數值

$url = 'https://www.baidu.com/s?wd=博 客';
$arr = explode('=', $url);
$url = $arr[0] . '=' . rawurlencode($arr[1]);
// 結果:https://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2

方法二:封裝通用中文 URL 編碼函數

function cn_urlencode($url) {
    $pregstr = "/[\x{4e00}-\x{9fa5}]+/u"; // UTF-8 中文正則
    if (preg_match_all($pregstr, $url, $matchArray)) {
        foreach ($matchArray[0] as $val) {
            $url = str_replace($val, urlencode($val), $url);
        }
        if (strpos($url, ' ')) {
            $url = str_replace(' ', '%20', $url);
        }
    }
    return $url;
}

// 使用
$url = 'https://www.baidu.com/s?wd=博 客';
echo cn_urlencode($url);
// 結果:https://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2

最佳實踐建議

  • 優先使用 rawurlencode():符合 RFC 3986 標準,空格編為 %20,相容性更佳。
  • 針對性編碼:僅對查詢字串的值(= 之後)編碼,勿對整個 URL 執行。
  • 處理已編碼 URL:若 URL 可能已部分編碼,先用 rawurldecode() 解碼再重新編碼,避免雙重編碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved