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访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
php数组键值用法实例分析
Feb 27 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
PHP引用返回用法示例
May 28 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
php源码的使用方法讲解
Sep 26 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
PHP添加MySQL数据记录代码
2008/06/07 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python操作xml文件详细介绍
2014/06/09 Python
详细解读Python中的__init__()方法
2015/05/02 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python爬取三国演义的实现方法
2016/09/12 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
自动化专业毕业生自荐信
2013/11/01 职场文书
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
小学一年级学生评语
2014/04/22 职场文书
给校长的建议书100字
2014/05/16 职场文书
项目经理任命书内容
2014/06/06 职场文书
大学同学会活动方案
2014/08/20 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
主持人大赛开场白
2015/05/29 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技