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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
PHP实现上传图片到 zimg 服务器
Oct 19 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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 uniqid函数生成唯一ID
2015/11/18 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
常用的 JS 排序算法 整理版
2018/04/05 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
wxPython使用系统剪切板的方法
2015/06/16 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python制作朋友圈九宫格图片
2019/11/03 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
python脚本和网页有何区别
2020/07/02 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
体育活动总结范文
2014/05/04 职场文书
中学教师师德承诺书
2014/05/23 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
如何用python插入独创性声明
2021/03/31 Python
python实现简单反弹球游戏
2021/04/12 Python
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python