php中使用urlencode()和urldecoe()和http_build_query()函数

之前一直没有用到过urlencode()函数,知道有人问我,为什么urlencode()函数将url地址进行编码处理之后,空格变成了“+”号字符,一致认为这是urlencode()函数规定的,其实不然:

  urlencode() 是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URLurlencode() 的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)
  
  urldecode() 就是将url编码后的字符串还原成未编码的样子。
<?php
 //GB2312的Encode
 echo urlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.+  (这里将空格变成了 “+”号)
 echo urldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_.
 echo rawurlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.%20 (这里将空格变成了“%20”字符)
 echo rawurldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_.
?>

urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“%20”。

如果要使用UTF-8的Encode,有两种方法:

一、将文件存为UTF-8文件,直接使用urlencode、rawurlencode即可。

二、使用mb_convert_encoding函数:

<?php
 $url = 'http://s.jb51.net/中文.rar';
 echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";
 echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";
 //http%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar
?>

那么:

http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理。
http_build_query()函数如何将空格编码为“%20”字符?
解决方案如图:

在这里插入图片描述

<?php

  $arr = [
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
  ];
  echo http_build_query($arr,'','',PHP_QUERY_RFC3986);
  echo http_build_query($arr, '', '&amp;');
  echo http_build_query($data,'',ini_get('arg_separator.output'),PHP_QUERY_RFC3986);
  
?>

总结如下:

  1. 数字、大小写字母都不编码。
  2. 减号、点号、下划线 三个不编码。
  3. rawurlencode比urlencode多编码一个加号("+")。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值