PHP中特殊字符和特殊字符URL传输的解决方案
对中国人来说,一般做法是:
在通过这些文本字符串的URL,先进行urlencode($文本);
但是对于一些危险字符,如HTML字符甚至SQL注入相关字符,如果它们显然传输到系统,出于安全原因,系统将过滤掉它们。
现在,我们需要这些危险人物,我们应该这样做吗
我认为这是他们的第一代码的方式,base64_encode($文本),并给他们base64_decode($文本)解码在服务器端。
这似乎很完美,但在使用过程中还有另一个问题。的base64_encode编码的字符串包含的字符,如 /
(base64_encode)由于在用户输入的传递函数(少量的内容),当用户提交(提交后)在一个数组。所以我把这个想法与bse64_encode()函数来加密。当跳转到页面进行处理时,我给获得接收,两边的加密数据不会出现这一点。少一+字。
用户提交加密:
tpk9tnpnykususe6xyyjndy7jim0njsufmavwcehfmyrxq / bwchllmjdztlo3tpvlnxmz + vi69ehskehfhw =
处理页面是通过GET接收的:
tpk9tnpnykususe6xyyjndy7jim0njsufmavwcehfmyrxq / bwchllmjdztlo3tpvlnxmz vi69ehskehfhw =
对比发现少了一个加号,不知道是什么原因来引导(猜测它可能得到,+字符可能得不到它!)还要问一下主手指。
这些字符在URL编码和特殊字符中,例如+
所以,一个妥协的思想,第一个Base64编码后的特殊字符替换,到服务器,并替换:
Resolvent:
用户提交加密字符串。有一次,我不得不改成其他角色+角色。如:str_replace(+,'_,$content);
两。在页面处理转换一次又一次:如:str_replace('_ ',+,$的内容);
复制代码代码如下所示:
功能base_encode($str){
$ =数组()
美元区=阵列(_a
老base64_encode美元($str);
新= str_replace美元(美元美元美元区,SRC,老);
返回$新;
}
功能base_decode($str){
$ src=阵列(_a
美元区=阵列( /
老str_replace美元($ SRC,美元区,$str);
新的美元= base64_decode($岁);
返回$新;
}
以下是浏览器中的效果
xoo6w6osuf65_aiy_atl_b00ke5_b8jnus6ho6gjoam_c
该urldecode的实例方法很简单
URLDecode(String str)
给定的编码解码字符串有% # #返回解码后的字符串。
1例# urldecode()的例子
复制代码代码如下所示:
< PHP
美元=爆炸('',query_string美元);
$ I = 0;
当($ i <计数($ A)){
$ =拆分(t,$ $ { i });
参数echo'value,htmlspecialchars(URLDecode($ { 0 })),
'是',htmlspecialchars(URLDecode($ { 1 })),;
美元+;
}
>