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 相关文章推荐
生成缩略图
Oct 09 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
php表单习惯用的正则表达式
Oct 11 PHP
PHP大文件分割分片上传实现代码
Dec 09 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/08/08 PHP
PHP下10件你也许并不了解的事情
2008/09/11 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
iview实现图片上传功能
2020/06/29 Javascript
python实现决策树ID3算法的示例代码
2018/05/30 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
数学专业推荐信范文
2013/11/21 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
自我鉴定书
2014/03/24 职场文书
表扬稿格式范文
2015/01/16 职场文书
劳资员岗位职责
2015/02/13 职场文书
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技