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

URL 參數含換行符導致 JS/PHP 賦值失敗的解決方案

     編輯:PHP 綜合知識

問題場景

透過 URL 傳遞參數時,若參數值包含換行符(URL 編碼為 %0A),直接在 JavaScript 或 PHP 中接收並賦值給變數,可能導致語法錯誤或邏輯異常。例如:

// PHP 產生的 JS 程式碼
var param = "第一行
第二行"; // JS 語法錯誤:字串未閉合

核心解決原則:傳輸端編碼,接收端解碼

在送出請求前對參數值進行 URL 編碼,接收端再解碼還原,即可避免特殊字元破壞語法結構。

PHP 端處理

<?php
// 送出端:編碼
$rawValue = "包含\n換行\r\n和特殊字元&符號";
$encoded = urlencode($rawValue);
// 產生連結
echo "<a href='target.php?data=$encoded'>跳轉</a>";

// 接收端:解碼
$decoded = urldecode($_GET['data'] ?? '');
?>

JavaScript 端處理

<script>
// 送出端:編碼
const raw = "包含\n換行\n和特殊字元&符號";
const encoded = encodeURIComponent(raw); // 推薦用 encodeURIComponent
// location.href = `target.php?data=${encoded}`;

// 接收端:解碼
const decoded = decodeURIComponent(encoded);
console.log(decoded); // 還原原始字串
</script>

函式對照表

語言編碼解碼備註
PHPurlencode()urldecode()空格編為 +,符合 application/x-www-form-urlencoded
PHPrawurlencode()rawurldecode()空格編為 %20,符合 RFC 3986,建議一般用途用此
JavaScriptencodeURIComponent()decodeURIComponent()元件編碼,適合查詢字串參數值
JavaScriptencodeURI()decodeURI()整體 URL 編碼,不編碼 :/?#[]@ 等保留字元

最佳實踐建議

  • PHP 產生 URL 給 JS:用 rawurlencode(),JS 用 decodeURIComponent()。
  • JS 送 AJAX 給 PHP:用 encodeURIComponent(),PHP 用 urldecode() 或自動解碼($_GET/$_POST 已自動解碼)。
  • 資料庫儲存:存原始字串,輸出到 HTML/JS/URL 時才依語境編碼(htmlspecialchars, json_encode, urlencode)。

常見誤區

  1. 以為 $_GET 會保留 %0A —— PHP 已自動 urldecode,拿到的是真正的換行字元。
  2. 用 encodeURI() 編碼參數值 —— 會保留 & = 等字元,導致參數切割錯誤,必須用 encodeURIComponent()。
  3. 雙重編碼/解碼 —— 造成亂碼,確保「編一次、解一次」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved