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 页面执行时间计算代码
Dec 04 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
php自定义加密与解密程序实例
Dec 31 PHP
php生成年月日下载列表的方法
Apr 24 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
laravel Validator ajax返回错误信息的方法
Sep 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
一个程序下载的管理程序(三)
2006/10/09 PHP
也谈php网站在线人数统计
2008/04/09 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JS表的模拟方法
2015/02/05 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
python类和继承用法实例
2015/07/07 Python
一百行python代码将图片转成字符画
2021/02/19 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
电子商务自荐书范文
2014/01/04 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
美术教师自我鉴定
2014/02/12 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
征兵宣传标语
2014/06/20 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
员工辞退通知书
2015/04/17 职场文书
2015学校图书管理员工作总结
2015/05/11 职场文书
新兵入伍决心书
2015/09/22 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
Go语言 详解net的tcp服务
2022/04/14 Golang
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python