PHP base64编码后解码乱码的解决办法


Posted in PHP onJune 19, 2014

在用PHP做东西的时候发现了一个问题,可以简单的归结为乱码的问题,但是这个问题不是函数本身造成的。来看看罪魁祸首是谁。

嫌疑人:base64_encode 和 base64_decode

罪行:我写了一个跳转和提示函数,接收提示信息后跳转到指定的页面,但是跳转提示时汉字乱码。

跳转模版代码如下:

<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="author" content="王健 wj@yurendu.com" />

<title>跳转提示</title>

<style type="text/css">

*{ padding: 0; margin: 0; }

body{ background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px;  text-align:center; }

.system-message{ width:600px; margin:150px auto 0 auto; background:#f8f8f8; border:1px solid #ccc;-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;-webkit-box-shadow: #666 0px 0px 10px;-moz-box-shadow: #666 0px 0px 10px;box-shadow: #666 0px 0px 10px;}

.system-message h1{ font-size:30px; font-weight:normal; height:100px; line-height:100px; color:#c60;}

.system-message .jump{ padding: 40px 0;}

.system-message .jump a{ color: #333;}

.system-message .success,.system-message .error{ height:60px; line-height:70px; font-size: 18px; color:#900;}

.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}

</style>

</head>

<body>

    <div class="system-message">

        <?php if( $_GET['success'] ){?>

            <h1>:)   恭喜!</h1>

            <p class="success"><?php echo base64_decode($_GET['message']); ?></p>

        <?php }else{?>

            <h1>:(   出错了!</h1>

            <p class="error"><?php echo base64_decode($_GET['message']); ?></p>

        <?php }?>

        <p class="detail"></p>

        <p class="jump">系统将在 <b id="wait"><?php echo $_GET['time']; ?></b> 后跳转,可直接 <a id="href" href="<?php echo base64_decode($_GET['url']); ?>">点此跳转</a></p>

        

    </div>

<script type="text/javascript">

(function(){

var wait = document.getElementById('wait'),href = document.getElementById('href').href;

var interval = setInterval(function(){

 var time = --wait.innerHTML;

 if(time <= 0) {

  location.href = href;

  clearInterval(interval);

 };

}, 1000);

})();

</script>

</body>

</html>

PHP redirect函数定义如下:

/* 提醒后跳转 */

function _alert( $success=true, $message='success', $time='3', $url='/'){

 header('Location:/include/redirect.php?success='.$success.'&message='.base64_encode($message).'&time='.$time.'&url='.base64_encode($url));

 exit;

}

假如在PHP中这样调用函数的话:
$query = "update content set bid='$clean[bid]',title='$clean[title]',content='$clean[content]',path='$clean[path]' where id=".$clean['id'];

if( mysql_query($query) ){

 _alert(1,'修改成功',3,'/admin/manage.php');

}else{

 _alert(false,'修改失败'.mysql_error(),5,'/admin/manage.php');

}

你就会看到,“修改成功”或者是“修改失败”这几个汉字乱码了。

为什么?

有时候用base64_encode加密后,以GET的形式传到其他页面,用base64_decode解密的时候,出现乱码。

遇到这个问题的时候,我就纳闷了,为什么有一些能正确解密,但是有一些却出现乱码呢?

后来经过检查,发现有一些中文字符,用GET形式传过来的时候,+号会被替换成空格。

为了防止出现乱码的情况,我做了一步替换,然后再解密,果然,乱码的问题,不复存在了!

现在问题已经很简单了,只要多写一步就好了

$str = base64_decode(str_replace(" ","+",$_GET['str']));

原来,文章一开始定错了嫌疑人了,冤枉了那两个函数了。。。

还可以参考这篇文章:PHP安全的URL字符串base64编码和解码

PHP 相关文章推荐
PHP应用JSON技巧讲解
Feb 03 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
基于PHP制作验证码
Oct 12 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 PHP
PHP安全的URL字符串base64编码和解码
Jun 19 #PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 #PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 #PHP
ThinkPHP CURD方法之field方法详解
Jun 18 #PHP
ThinkPHP CURD方法之data方法详解
Jun 18 #PHP
ThinkPHP CURD方法之order方法详解
Jun 18 #PHP
ThinkPHP CURD方法之table方法详解
Jun 18 #PHP
You might like
一个数据采集类
2007/02/14 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
python中join()方法介绍
2018/10/11 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
python 实现list或string按指定分段
2019/12/25 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
python excel和yaml文件的读取封装
2021/01/12 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
指针和引用有什么区别
2013/01/13 面试题
本科生的职业生涯规划范文
2014/01/09 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
使用python绘制横竖条形图
2022/04/21 Python
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技