昨天看UCHome源码的时候,发现有些地方用urlencode,有些地方用rawurlencode。由于对这两个方法的差异不是很清楚,特意写了一段代码来测试。

请将下面的代码保存到一个PHP文件中:

test_encode('http://www.baidu.com?a=search&k=eclipse');

test_encode(':/?= ');

test_encode('中文');

function test_encode($s)

{

echo "urlencode('$s') = [";

var_dump(urlencode($s));

echo "]
";

echo "rawurlencode('$s') = [";

var_dump(rawurlencode($s));

echo "]
";

}

上面代码执行结果如下:

urlencode('http://www.baidu.com?a=search&k=eclipse') = [string(53) "http%3A%2F%2Fwww.baidu.com%3Fa%3Dsearch%26k%3Declipse" ]

rawurlencode('http://www.baidu.com?a=search&k=eclipse') = [string(53) "http%3A%2F%2Fwww.baidu.com%3Fa%3Dsearch%26k%3Declipse" ]

urlencode(':/?= ') = [string(19) "%3A%2F%3F%3D+%26%23" ]

rawurlencode(':/?= ') = [string(21) "%3A%2F%3F%3D%20%26%23" ]

urlencode('中文') = [string(18) "%E4%B8%AD%E6%96%87" ]

rawurlencode('中文') = [string(18) "%E4%B8%AD%E6%96%87" ]

从上面的执行结果可以看出,urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的,唯一的不同是对空格的处理,urlencode处理成“+”,rawurlencode处理成“%20”。

看看PHP Manual对两个函数的说明:

urlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

rawurlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。

php %3f,PHP相关推荐

  1. Python工作笔记005---旧式字符串格式化_%5.3f的含义

    JAVA技术交流QQ群:170933152 旧式字符串格式化 % 操作符也可以实现字符串格式化. 它将左边的参数作为类似 sprintf() 式的格式化字符串, 而将右边的代入, 然后返回格式化后的字 ...

  2. C语言基础---3.格式化输出总结---%d ,%s,%f %.3f,%m.ns 以及sprintf函数

    文章目录 1.常规----格式化输出 2.特殊----格式化输出 3.sprintf-----格式化输出 1.常规----格式化输出 %d //整型输出%ld //长整型输出%o //以八进制数形式输 ...

  3. byte[]转String出现乱码(EFBFBD或3F)

    问题: byte[]转String(以方便用split()对byte[]进行分割或其他操作)时,选择编码方式不同会导致产生一些字符乱码 UTF-8时产生EFBFBD GBK时产生3F 等等 原因: 这 ...

  4. C# serialport串口接收数据异常,出现很多3F的解决方法

    出现3F是奇偶校验错误导致的,你可以将奇偶校验属性设置为none,至于出现短文,是由于数据接收不完整导致,你可以在读取缓存数据的时候延时个20ms就可以了 转载于:https://my.oschina ...

  5. 机器学习中:autopct = '%0.3f%%',代表的意思。

    a = '%3.1f%%'% 1000 # 1000.0%a = '%0.3f%%'% 1000 #1000.000%a = '%1.1f%%'% 100 #100.0%a = '%6.1f%%'% ...

  6. python输出宽度是什么意思_python字符串格式化输出的时候类似{0:.3f}是什么意思?...

    展开全部 %f 保留小数点后面六位有e69da5e6ba903231313335323631343130323136353331333431373266效数字,%.3f 保留三位小数. %e 保留小数 ...

  7. revit免费软件:绘制标高时如何自动排序为1F,2F,3F

    revit免费软件:绘制标高时如何自动排序为1F,2F,3F?当我们绘制标高时,我们希望它能自动排序1F.2F.3F..,但实际上,我们将样板文件中的标高设置为1F,然后在新项目中绘制标高时变成1G和 ...

  8. NUC 11构建 ESXi 7.0.3f安装网卡驱动-V2(2022年7月升级版)

    NUC 11构建 ESXi 7.0.3f安装网卡驱动 一.进入powershell 环境 windows 10 操作系统,以管理员的身份打开cmd终端,执行 c:> powershell 二.查 ...

  9. 存在于实数域的微观粒子3-∂f(x)/ ∂x=f(x).f(-x)

    如果将神经网络理解成是存在于实数域的微观粒子,那与之对应的波动方程应该是什么? Sigmoid的表达式 让Sigmoid函数就是欲求的波动方程的解,可以由Sigmoid反向构造出与之对应的一个微分方程 ...

最新文章

  1. 解析针对 HTTP/2 协议的不同步攻击
  2. 飞鸽传书内部护眼神功
  3. Qbxt 模拟题 day3(am) T3 选数字 (select)(贪心)
  4. Glory Ex坚持发展核心竞争力,致力于让更多人走进数字资产
  5. 拿下阿里投资 回血的网易云音乐能成功突围吗?
  6. 图片压缩的另一种实现(3)
  7. python安装pip之后 pip命令报错解决方法
  8. 变量不在选择列表中_Python3中的表达式运算符
  9. 耐用的蓝牙耳机推荐,现在比较好的蓝牙耳机点评
  10. 神经网络,英文字母识别
  11. 16天7000dict
  12. MPlayer安装和使用指南(转)
  13. python数据分析与挖掘(二十七)--- Pandas量化--股票基础知识
  14. gitlab rpm包安装方法
  15. 一年成为Emacs高手(像神一样使用编辑器)
  16. typescript (TS)进阶篇 --- 内置高阶泛型工具类型(Utility Type)
  17. python torch学习(一)
  18. nbu15_克鲁勃NBU 15
  19. 一、我来说LuCI: LuCI官方----3. Theme and Modules
  20. navicat连接数据库,闲置一段时间后,再次操作,反应非常缓慢

热门文章

  1. 【Python反射】通过函数名称获取函数
  2. 【计算机系统结构】第一周 课上笔记
  3. 【PAT甲级 BigInteger】1019 General Palindromic Number (20 分) Java版 7/7通过
  4. nodejs中的文件系统
  5. 一文读懂密码学中的证书
  6. 程序员如何用糖果实现盈利 - [别人家的程序员01]
  7. Intellij 14快捷键
  8. Java中创建对象的5种方式
  9. python虚拟机优化_KVM虚拟机管理及性能优化
  10. 详细了解BGP—边界网关协议