
本文讲解如何正确将 PHP 变量嵌入 JavaScript 的 window.location 实现跳转,重点解决因字符串拼接错误或特殊字符未转义导致的重定向失败问题。
本文讲解如何正确将 php 变量嵌入 javascript 的 `window.location` 实现跳转,重点解决因字符串拼接错误或特殊字符未转义导致的重定向失败问题。
在 PHP 中通过 <script> 动态跳转时,常见误区是直接用 PHP 字符串拼接 JavaScript 代码,例如:
$first = $user['first']; $second = $user['second']; $userdata = "'.$first.'&hello='.$second.'"; echo "<script> window.location = 'example/login?userid='.$userdata.'' </script>";
这段代码存在两个关键问题:
- 语法错误:PHP 变量 $userdata 被错误地写在单引号包围的 JavaScript 字符串中(如 'example/login?userid='.$userdata),而 PHP 不会解析单引号内的变量;
- 安全与兼容性风险:若 $first 或 $second 包含引号、换行符、反斜杠等特殊字符,会导致 JavaScript 解析失败,甚至 XSS 漏洞。
✅ 正确做法是:在 PHP 端用 json_encode() 将变量安全转为 JavaScript 字符字面量,再通过 JS 字符串拼接构造完整 URL。json_encode() 会自动处理引号转义、Unicode 编码和边界包裹(添加双引号),确保输出是合法、可执行的 JS 字符串。
推荐写法如下:
立即学习“PHP免费学习笔记(深入)”;
<?php $first = $user['first'] ?? ''; $second = $user['second'] ?? ''; $userdata = "$first&hello=$second"; // ✅ 安全拼接:json_encode() 输出带引号的 JS 字符串,+ 运算符在 JS 中完成拼接 echo "<script> window.location = 'example/login?userid=' + " . json_encode($userdata) . ";</script>"; ?>
? 补充说明:
- json_encode($userdata) 输出类似 "john%20doe&hello=world"(注意:它不会自动 URL 编码,但会正确转义引号等危险字符);
- 若需对参数值做 URL 编码(如空格转 %20),应先用 rawurlencode() 处理各字段,再拼接后 json_encode,例如:
$userdata = rawurlencode($first) . '&hello=' . rawurlencode($second); echo "<script> window.location = 'example/login?userid=' + " . json_encode($userdata) . ";</script>";
- 更健壮的做法是使用 header() 重定向(服务端跳转),避免依赖客户端 JS:
header("Location: example/login?userid=" . rawurlencode($first) . "&hello=" . rawurlencode($second)); exit;
⚠️ 注意事项:
- 避免在 json_encode() 前手动拼接引号(如 '"' . $str . '"'),这易出错且不安全;
- 确保 $user 数组已定义且键存在,建议使用空合并运算符 ?? 防止 Notice 错误;
- 若页面已输出 HTML 内容,header() 不可用,则必须使用 json_encode() + window.location 方案。
综上,json_encode() 是 PHP 向 JavaScript 安全传递字符串的黄金标准——它不是简单的“加引号”,而是生成符合 ECMAScript 规范的字符串字面量,是解决此类跳转失效问题的根本方案。



















