短链接还原php乱码怎么办_调整字符集编码解决显示问题【解答】
发布时间 - 2026-01-02 00:00:00 点击率:次短链接跳转后页面显示乱码的常见原因是PHP重定向时未正确设置字符集响应头或数据库存储URL时未使用utf8mb4编码,导致中文等非ASCII字符被错误解码;需在header中显式声明charset=utf-8并对URL路径使用rawurlencode(),同时确保MySQL表、连接及字段均为utf8mb4。
短链接跳转后页面显示乱码的常见原因
PHP 服务端返回的短链接重定向(301 或 302)若目标 URL 含中文或特殊字符,但未正确声明响应头的字符集,浏览器会按默认编码(如 ISO-8859-1)解析,导致跳转后的页面 URL 栏或页面内容出现 %E4%BD%A0%E5%A5%BD 类似乱码或问号——这本质是 UTF-8 字节被错误解码的结果。
PHP header() 重定向前必须设置 Content-Type 和 charset
即使只是做跳转(不输出 HTML),也要显式声明响应头的字符集,否则 PHP 默认不发 charset,浏览器无法正确解码 Location 中的非 ASCII 字符。
- 错误写法:
header('Location: https://example.com/你好');(无 charset,浏览器可能误判) - 正确写法:
header('Content-Type: text/html; charset=utf-8');必须在header('Location: ...')前调用 - 更稳妥做法:对跳转 URL 中的路径部分做
rawurlencode(),再拼接完整 URL
header('Content-Type: text/html; charset=utf-8');
$target = 'https://example.com/' . rawurlencode('你好世界');
header('Location: ' . $target);
exit;
MySQL 存储短链接原始 URL 时的编码陷阱
如果短链接系统把原始长 URL 存进数据库,而字段用的是 latin1 或未指定 utf8mb4,那么含中文的 URL 插入时就被截断或转成 ?,后续读取还原时自然乱码。
- 检查表字符集:
SHOW CREATE TABLE short_urls;,确认 URL 字段为utf8mb4 - 连接层也需一致:PDO 初始化时加
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4" - 避免用
mysql_real_escape_string()(已废弃),改用预处理 +utf8mb4连接
浏览器地址栏仍显示 %xx 编码?那是正常行为
现代浏览器(Chrome/Firefox/Safari)在地址栏中对非 ASCII 路径始终显示为百分号编码(如 %E4%BD%A0),但这不代表乱码——只要页面能正常渲染中文、接口返回正确 JSON、服务端日志里 $_SERVER['REQUEST_URI'] 可被 urldecode() 正确还原,就说明编码链路完整。
真正要验证的不是地址栏是否“好看”,而是:urldecode($_SERVER['REQUEST_URI']) 是否等于你存入数据库的原始 URL;以及 mb_detect_encoding() 检测结果是否为 UTF-8。
# mysql
# php
# html
# js
# json
# 编码
# 浏览器
# 字节
# safari
# firefox
# chrome
# pdo
# 接口
# location
# ASCII
# table
# 数据库
# https
# 跳转
# 重定向
# 服务端
# 的是
# 你好
# 那是
# 也要
# 均为
# 不代表
# 但这
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站图片在线制作软件,怎么在图片上做链接?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
新三国志曹操传主线渭水交兵攻略
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何在万网自助建站平台快速创建网站?
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
Python文件流缓冲机制_IO性能解析【教程】
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
大型企业网站制作流程,做网站需要注册公司吗?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Python函数文档自动校验_规范解析【教程】
Laravel如何配置任务调度?(Cron Job示例)
,网页ppt怎么弄成自己的ppt?
Laravel如何实现事件和监听器?(Event & Listener实战)
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
详解Huffman编码算法之Java实现
利用JavaScript实现拖拽改变元素大小
如何用花生壳三步快速搭建专属网站?
php json中文编码为null的解决办法
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
nginx修改上传文件大小限制的方法
音乐网站服务器如何优化API响应速度?
Firefox Developer Edition开发者版本入口
公司网站制作需要多少钱,找人做公司网站需要多少钱?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
EditPlus中的正则表达式 实战(1)
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
PHP正则匹配日期和时间(时间戳转换)的实例代码
怎么用AI帮你为初创公司进行市场定位分析?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
进行网站优化必须要坚持的四大原则
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
javascript中的try catch异常捕获机制用法分析
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
微信小程序 scroll-view组件实现列表页实例代码
Laravel如何使用Gate和Policy进行授权?(权限控制)


,导致中文等非ASCII字符被错误解码;需在header中显式声明charset=utf-8并对URL路径使用rawurlencode(),同时确保MySQL表、连接及字段均为utf8mb4。