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 AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
url decode problem 解决方法
Dec 26 PHP
php 定义404页面的实现代码
Nov 19 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
解决php扩展安装不生效问题
Oct 25 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音乐采集(部分代码)
2007/02/14 PHP
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
深入PHP FTP类的详解
2013/06/13 PHP
PHP设置进度条的方法
2015/07/08 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
理解javascript对象继承
2016/04/17 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
详解python statistics模块及函数用法
2019/10/27 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
外企财务年会演讲稿
2014/01/03 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
愚人节活动策划方案
2014/03/11 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
Python OpenCV形态学运算示例详解
2022/04/07 Python