php函数base64_encode后的参数包含加号解析出错的解决方案

在进入主题之前我们先来看这样如下代码,test.php

<?php
$url = "test2.php?name=".base64_encode('用来做测试的字符串')."&age=23";
header("Location:$url");

test2.php

<?php
var_dump(base64_decode($_GET['name']));
die();

访问http://localhost/test.php地址时,重定向到http://localhost/test2.php?name=55So5p2l5YGa5rWL6K+V55qE5a2X56ym5Liy&age=23地址,浏览器输出结果为:

string ‘用来做测??y??9ke??)?.,‘ (length=26)

怎么回事,base64_decode无法解码?

仔细观察重定向后的地址中加密后的name参数,其中包含“+”符号,而浏览器的地址栏中碰到“+”符号时会将加号转换为空格,于是要保证base64_decode进行正确的解码操作,我们可以先将参数中的空格替换成加号,如下代码所示:

<?php
$replaces = array(' ' => '+' );
var_dump(base64_decode(strtr( $_GET['name'], $replaces)));
die();

得到正确的输出结果:

string ‘用来做测试的字符串‘ (length=27)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-10 21:13:04

php函数base64_encode后的参数包含加号解析出错的解决方案的相关文章

在虚函数的声明的参数列表后加上“=0”就将函数变成了纯虚函数

在虚函数的声明的参数列表后加上“=0”就将函数变成了纯虚函数class Base{ virtual void function()=0;}我们不需要为纯虚函数Base::function()提供任何定义,那些声明了纯虚函数的类就是抽象类.任何试图创建一个抽象类对象的操作都会导致编译器错误.如果一个派生Base并且重写了Base::function()函数,它就成为了具体的类.class Derived :public Basae { void function(); } 通常将抽象类用作接口声明

Phaser.Game这个函数都有哪些参数

Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希望大家看后也能做出自己的html5游戏.大家可以先点击这里来试玩一下我已经做好的这个游戏,感受一下Phaser的游戏效果,游戏的完整代码我已经放到github上了.支持的浏览器:IE9+.Firefox.Chrome.Opera.Safari以及移动端的能支持html5的浏览器,推荐使用谷歌浏览器,

不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 函数重载 缺省参数 内联函数 函数模板 示例1.函数重载, 缺省参数CppFunction1.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppFunction1 { public: string Demo(); }; } CppFunction1.cpp /* * 函数重载,缺省参数

Python 基础学习之: Python math 模块、cmath 模块 区别是 cmath 模块运算的是复数,math 模块运算的是数学运算 Python数学函数列表及解释 Python math 模块提供了许多对浮点数的数学运算函数。 Python cmath 模块包含了一些用于复数运算的函数

Python math 模块.cmath 模块 Python 中数学运算常用的函数基本都在 math 模块.cmath 模块中. Python math 模块提供了许多对浮点数的数学运算函数. Python cmath 模块包含了一些用于复数运算的函数. cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算. 要使用 math 或 cmath 函数必须先导入: import math 查看 math 查看包中的内容: impo

在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句

在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句 突然看到这个问题,脑袋一蒙,不知道啥意思,后来想想,试图把select里的选项放到后面,问题自然解决! 下面这个就是报“orderdate select shipcountry,sum(shipvia) as totalvia,OrderDate as thefirsttime from orders group by shipcountry,相应的从网上看到其他的朋友也有这样的问题 比如要显示authors表中

王爽-汇编语言-综合研究五-函数接收不定量参数

(一) 研究目的 我们知道,在C语言中,函数是可以传递参数的.有些函数在声明是就定义了要传的参数的个数,比如我们定义void a(int i);这说明函数a只接受一个int型参数.而有些函数,比如print函数,是可以接收不定个数的参数的.那函数是怎样接收不定量参数的呢? (二) 研究过程 1) 有限个数的参数 首先我们来看程序是如何传参数的.我们编写一个程序,让他传递有限个参数: 我们编译链接,然后反汇编查看其代码: 我们看其代码,首先,在main函数中,分别将‘a’与2对应的ASCLL码放到

C/C++函数中使用可变参数

先说明可变参数是什么,先回顾一下C++里面的函数重载,如果重复给出如下声明: 1 int func(); 2 int func(int); 3 int func(float); 4 int func(int, int); 5 ... 这样在调用相同的函数名 func 的时候,编译器会自动识别入参列表的格式,从而调用相对应的函数体. 但这样的方法毕竟有限,试想一下我们假如想定义一个函数,我们在调用之前(在运行期之前)根本不知道我到底要调用几个参数,并且不知道这些参数是个什么类型,例如我们想定义一个

php函数fgetcsv()中的参数enclosure的解读

原型 fgetcsv(resource fp, int length [, string delimiter [, string enclosure [, string escape]]]) 对于enclosure的解释是围绕字段的字符. 参考http://blog.ifeeline.com/217.html的说明: 包含逗号, 双引号, 或是换行符的字段必须放在引号内(只有三个特殊值时需要特别处理).字段内部的引号必须在其前面增加一个引号来实现引号的转码.分隔符逗号前后的空格 可能不会被修剪掉

javascript 红宝书笔记之函数、变量、参数、作用域与内存问题

ECMAScript 不介意传进来多少个参数,也不介意传进来的参数类型. 理解参数: 命名的参数只提供便利,不是必需的. ECMAScript 的变量包含两种不同的数据类型的值.分别是 简单的数据构成的基本数据型值,不能给基本型值添加属性: var name = "kevin"; name.age = 27; console.log(name.age);     //undefined 多个值构成的对象,引用类型值.引用类型的值,可以添加动态属性,并可以改变这个动态属性的值或者可以删除