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 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
php session 预定义数组
Mar 16 PHP
PHP 全角转半角实现代码
May 16 PHP
php数据类型判断函数有哪些
Sep 23 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
浅析php原型模式
Nov 25 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 PHP
PHP7 windows支持
Mar 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
vue实现拖拽效果
2019/12/23 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Django中使用Celery的方法示例
2018/11/29 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
个人找工作的自我评价
2013/10/17 职场文书
设计总监岗位职责
2013/12/07 职场文书
天地会口号
2014/06/17 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
工作推荐信模板
2015/03/25 职场文书