PHP 執行於伺服器端,JavaScript 執行於瀏覽器端。**傳遞本質是 PHP 產出包含 JS 變數宣告的 HTML/JS 代碼**。三種主流模式:
123,
'title' => 'PHP 傳值給 JS 完全指南',
'tags' => ['php', 'javascript', 'json'],
];
?>
= htmlspecialchars($article['title']) ?>
$user->id,
'name' => $user->name,
'avatar' => $user->avatar_url,
'roles' => $user->roles,
]);
?>
// 前端
async function loadUserProfile() {
const resp = await fetch('/api/user/profile.php', {
credentials: 'include' // 攜帶 Cookie
});
if (!resp.ok) throw new Error('登入已過期');
const user = await resp.json();
// 更新 UI、存入 Vuex/Redux/Pinia...
return user;
}
| 錯誤寫法 | 風險 | 正確寫法 |
|---|---|---|
var x = '= $val ?>'; | XSS、引號截斷、換行破壞 | var x = = json_encode($val) ?>; |
var x = "= $val ?>"; | 雙引號注入 | var x = = json_encode($val) ?>; |
data-x="= $val ?>" | 屬性跳脫 | data-x="= htmlspecialchars(json_encode($val), ENT_QUOTES) ?>" |
若啟用 script-src 'self' 禁止內聯腳本:
data-* 屬性 + 外部 JS 檔案config.js.php 並 script src="config.js.php" (需正確 Header)window.APP_CONFIG 物件,減少全域變數json_encode + 內聯腳本 是最通用模式;data-* 屬性 適合元件化資料;AJAX 適合 SPA 與敏感資料。核心鐵律:**永不手動拼接 JS 字串,永遠 json_encode**。