php参数传递需全程统一utf-8编码:文件存为utf-8无bom,输出前设header,html加meta,数据库设utf8mb4;get参数须用rawurlencode()编码、rawurldecode()解码;含特殊字符或大量中文建议改用post或base64伪装。

PHP参数传递涉及编码问题,核心在于统一字符集和正确编码传输内容。中文或特殊字符(如+、&、/)若未处理,容易在URL中被截断、误解析或显示为乱码。关键不是“设置一个开关”,而是从发送、传输到接收全程保持一致。
确保整个链路使用UTF-8编码
这是基础前提,缺一不可:
- PHP脚本文件本身保存为UTF-8无BOM格式(编辑器里确认)
- 在PHP输出HTML前加:header('Content-Type: text/html; charset=utf-8');
- HTML页面的中包含:
- 数据库连接设为UTF-8,例如mysqli中调用$conn->set_charset("utf8mb4");
GET参数必须URL编码,不能直接拼接中文
URL中不允许直接出现未编码的中文或特殊符号(如空格、+、&),否则会被浏览器或服务器错误解析。
- 发送端用urlencode()或更推荐的rawurlencode()编码参数值
- 例如:$url = "page.php?name=" . rawurlencode("张三") . "&q=" . rawurlencode("C++");
- 接收端用urldecode()或rawurldecode()还原(与发送端函数配对)
- 注意:urlencode()把空格转成+,rawurlencode()转成%20,后者更符合现代标准
敏感或复杂参数建议改用POST或Base64伪装
GET不适合传大量中文、含特殊符号或需隐藏含义的参数:
- 表单提交优先用method="post",PHP用$_POST接收,无需手动URL编码
- 若仍需GET形式(如分享链接),可用base64_encode()先加密原始字符串,再用urlencode()包裹一次防URL损坏
- 例如:$safe = urlencode(base64_encode("订单号:20260826-测试"));,接收时按base64_decode(urldecode($_GET['p']))还原
避免常见陷阱
这些细节常被忽略,却直接导致乱码或参数丢失:
- 不要在header("Location: ...")跳转前有任何输出(包括空格、BOM、echo)
- 不要用$_GET直接拼SQL或HTML,先过滤、转义、验证长度
- “C++”这类含+的参数,不编码会变成“C ”(+被当空格),务必用rawurlencode("C++")得%2BC%2B
- 多个参数拼接时,每个值单独编码,不要对整个query string整体编码
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











