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

PHP 獲取帶 # 等特殊符號的 URL 參數完整方案

     編輯:PHP 相關知識

PHP 獲取帶 # 等特殊符號的 URL 參數完整方案

場景:URL 參數值包含 #、&、= 等保留字符時,直接傳遞會導致參數截斷。例如 c.php?key=9#888,PHP 僅能獲取到 9。

根因分析

# 在 URL 中標識錨點(Fragment),瀏覽器**不會**將其及後內容發送給服務器。同理,& 分隔參數,= 分隔鍵值,若參數值含這些字符,必須編碼。

最佳實踐:前端編碼 + 後端解碼

方案一:JavaScript encodeURIComponent(推薦)

<input id="searchs" placeholder="輸入SN碼" />
<a class="btn" onclick="searchSN()">查詢</a>

<script>
function searchSN() {
    const keys = $('#searchs').val().trim();
    if (!keys) return alert('請填寫SN碼');
    // 編碼:保留字符全部轉義,空格變 %20
    const encoded = encodeURIComponent(keys);
    window.location.href = 'c.php?key=' + encoded;
}
</script>

方案二:舊版 escape() 函數(不推薦)

keys = escape(keys); // 已棄用,不編碼 @ * _ + - . /

差異: encodeURIComponent 編碼範圍更全(含 # & = + 等),符合 RFC 3986;escape 保留字符較多,且對 Unicode 處理不一致,MDN 已標記棄用。

後端 PHP 透明獲取

<?php
// $_GET 自動完成 URL 解碼
$key = $_GET['key'] ?? '';
echo $key; // 直接獲得原始值 "9#888"

補充:常見 URL 相關操作

獲取上一頁引薦地址

$referer = $_SERVER['HTTP_REFERER'] ?? '';
// 注意:用戶可偽造/禁用,不可作為安全依據

遠程抓取網頁內容

$url = 'https://zhidao.baidu.com/question/123456789.html';
$content = @file_get_contents($url);
// 生產環境建議用 cURL,支援超時、重定向、Header 自定義

編碼對照表(常見保留字符)

字符URL 編碼場景
#%23錨點/參數值
&%26參數分隔/參數值
=%3D鍵值分隔/參數值
空格%20參數值
%%25編碼標識/參數值
+%2B表單空格/參數值

核心原則:前端負責編碼,傳輸層透明傳遞,後端自動解碼。切勿嘗試在 PHP 中通過 $_SERVER['REQUEST_URI'] 手動解析,極易出錯且不可維護。

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