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

PHP URL 函數完整指南:編解碼、解析、Header 取得、Meta 標籤提取

     編輯:PHP 相關知識

前言

Web 開發頻繁處理 URL 編碼、解析、遠端 Header 獲取等需求。PHP 內建 URL 相關函數功能強大,本文系統整理 base64、get_headers、get_meta_tags、http_build_query、parse_url、urlencode/rawurlencode 等核心函數,附實戰範例。

一、Base64 編解碼

$str = 'Hello PHP 中文';
$enc = base64_encode($str);      // SGVsbG8gUEhQIOS4lueVjA==
$dec = base64_decode($enc);      // Hello PHP 中文

// URL 安全 Base64(無 + / =)
$safe = rtrim(strtr(base64_encode($str), '+/', '-_'), '=');
$orig = base64_decode(strtr($safe, '-_', '+/'));

二、取得 HTTP 回應 Header

$url = 'https://api.github.com/users/octocat';

// 索引陣列
$headers = get_headers($url);
print_r($headers);
/*
Array
(
    [0] => HTTP/2 200
    [1] => server: GitHub.com
    [2] => date: Mon, 20 May 2024 12:00:00 GMT
    ...
)
*/

// 關聯陣列(format=1)
$assoc = get_headers($url, 1);
echo $assoc['Content-Type']; // application/json; charset=utf-8
echo $assoc['Server'];       // GitHub.com

三、提取網頁 Meta 標籤

$url = 'https://www.php.net';
$meta = get_meta_tags($url);
print_r($meta);
/*
Array
(
    [description] => PHP is a popular general-purpose scripting language...
    [keywords] => PHP, scripting, language, web development
    [generator] => Hugo 0.120.0
    [viewport] => width=device-width, initial-scale=1.0
)
*/
// 注意:需 allow_url_fopen=On,大型頁面建議用 cURL 取得 HTML 再用 DOMDocument 解析

四、建構查詢字串

$params = [
    'category' => 'books',
    'tags'     => ['php', 'oop', 'design-patterns'],
    'page'     => 2,
    'sort'     => 'price_desc',
];

// 索引鍵自動編碼,值自動 urlencode
$query = http_build_query($params);
// category=books&tags%5B0%5D=php&tags%5B1%5D=oop&tags%5B2%5D=design-patterns&page=2&sort=price_desc

// 數字索引加前綴
$query = http_build_query(['apple', 'banana'], 'fruit_');
// fruit_0=apple&fruit_1=banana

// 反解析
parse_str($query, $out);
print_r($out);

五、URL 解析

$url = 'https://user:pass@api.example.com:8443/v1/users/123?active=1&role=admin#profile';

$parts = parse_url($url);
print_r($parts);
/*
Array
(
    [scheme] => https
    [host] => api.example.com
    [port] => 8443
    [user] => user
    [pass] => pass
    [path] => /v1/users/123
    [query] => active=1&role=admin
    [fragment] => profile
)
*/

// 只取特定部分
echo parse_url($url, PHP_URL_HOST);   // api.example.com
echo parse_url($url, PHP_URL_PATH);   // /v1/users/123

六、URL 編解碼差異

$raw = 'https://example.com/search?q=php 中文&page=1';

echo "urlencode:     ", urlencode($raw), PHP_EOL;
// https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dphp+%E4%B8%AD%E6%96%87%26page%3D1

echo "rawurlencode:  ", rawurlencode($raw), PHP_EOL;
// https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dphp%20%E4%B8%AD%E6%96%87%26page%3D1

// 關鍵差異:空格編碼
// urlencode      -> +   (application/x-www-form-urlencoded 標準)
// rawurlencode   -> %20 (RFC 3986 標準,URL 路徑/片段建議)

// 解碼對應
urldecode($enc);      // 對應 urlencode
rawurldecode($enc);   // 對應 rawurlencode

七、實戰場景整合

場景 1:API 簽名產生(參數字典序 + rawurlencode)

function buildSignature(array $params, string $secret): string {
    ksort($params);
    $query = http_build_query($params, '', '&', PHP_QUERY_RFC3986); // PHP 5.4+
    return hash_hmac('sha256', $query, $secret);
}

場景 2:安全重導向(驗證同源)

function safeRedirect(string $target, array $allowedHosts): void {
    $parts = parse_url($target);
    if (!isset($parts['host']) || !in_array($parts['host'], $allowedHosts, true)) {
        $target = '/'; // fallback
    }
    header("Location: $target", true, 302);
    exit;
}

場景 3:Data URI 產生(Base64 內嵌圖片)

function dataUri(string $file, string $mime): string {
    return 'data:' . $mime . ';base64,' . base64_encode(file_get_contents($file));
}

總結

掌握 parse_url 解析、http_build_query 組裝、rawurlencode 標準編碼、get_headers 偵測、base64 傳輸編碼,即可應付 95% URL 處理場景。注意 allow_url_fopen 安全性,遠端請求優先使用 cURL/Guzzle 並設定逾時與驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved