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防止SQL注入详解及防范
Nov 12 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python基于http下载视频或音频
2018/06/20 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
python的json包位置及用法总结
2020/06/21 Python
详解python的变量缓存机制
2021/01/24 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
母亲节演讲稿范文
2014/01/02 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
公司活动邀请函
2014/01/24 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
食品安全处置方案
2014/06/14 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android