浅析rawurlencode()和urlencode()函数区别

 

今天在阅读开源代码时发现了一个URL的编码函数:rawurlencode(),以前一直没有注意过,因为在平时的开发上主要使用的是 urlencode(),故专门研究了一番。

其实这两个函数的区别很简单,它们两个都会把URL中的非英文字符进行转义,替换成"%"后跟两位十六进制数,不同的是:rawurlencode 遵守是94年国际标准备忘录RFC 1738,对空格的转义是'%20′;而urlencode的编码实现的是传统做法,和POST表单数据一样会把空格转义成"+"号。

举个例子:
如果URL地址源的形式是:http://www.111cn.net 编码区别
rawurlencode($url):
http%3A%2F%2Fityizhan.com%2FPHP%20%E7%BC%96%E7%A0%81%E5%8C%BA%E5%88%AB%2B
urlencode($url):
http%3A%2F%2Fityizhan.com%2FPHP+%E7%BC%96%E7%A0%81%E5%8C%BA%E5%88%AB%2B

从这个例子中可以很明显的看出二者的区别,如果我们想给编码的URL解码的话,可以使用这两个函 数:rawurldecode(),urldecode() 。在实际的开发中为了避免URL格式不统一,还是推荐大家使用rawurlencode()来进行URL的编码。

同样的操作在Javascript也有一些区别,大家可以参考:javascript的URL编码与反编码, 里面讲述了Javascript中escape(), encodeURI() ,encodeURIComponent()的编码使用

时间: 2024-09-28 16:20:36

浅析rawurlencode()和urlencode()函数区别的相关文章

PHP rawurlencode与urlencode函数的深入分析_php技巧

问题:2个函数都是针对字符串转义使其适合做文件名.该用哪个?哪个更标准? 结论:rawurlencode遵守是94年国际标准备忘录RFC 1738,urlencode实现的是传统做法,和上者的主要区别是对空格的转义是'+'而不是'%20'javascript的encodeURL也是94年标准, 而javascript的escape是另一种用"%xxx"标记unicode编码的方法. 推荐在PHP中使用用rawurlencode.弃用urlencode 样例source: 超级无敌的人s

php中urlencode()函数详解说明

php教程中urlencode()函数详解说明 URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu.Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URL. URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu.Yisou等使用),另一种是基于UTF-8的Encode(Google.Yahoo等使用). 本工具分别实现两种方式的Encode与Decode: 中文 -> GB2312的Encode

关于c#中的消息处理函数和vc中的消息处理函数区别

函数|区别 从vc入门编程的,相信大家都很熟悉PreTranslateMessage和WindowProc两个函数,前者是预处理windows发给控件的消息,后者是处理剩余的控件消息.对于PreTranslateMessage函数,一般来说,我们是这样处理控件消息的: BOOL test::PreTranslateMessage(MSG* pMsg) {if(pMsg->hwnd==GetSafeHwnd()){ if(pMsg->message==WM_MOUSEMOVE){m_toolti

浅析 JavaScript 中的 函数 currying 柯里化

原文:浅析 JavaScript 中的 函数 currying 柯里化 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果.因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程. 柯里化一个求和函数 按照分步求值,我们看一个

浅析javascript异步执行函数导致的变量变化问题解决思路_javascript技巧

浅析javascript异步执行函数导致的变量变化问题解决思路 for(var i=0;i<3;i++) { setTimeout(function(){ console.log(i) },0); } 控制台输出: 3 3 3 这是因为执行方法的时候for循环已经执行完成每次执行的时候取得都是3 而不是1-2-3这时我们可以使用立即执行函数为每一次循环创建一个变量副本来供定时器调用解决这个问题 for (var i = 0; i < 3; i++) { setTimeout( (functio

php程序中mt_rand与rand函数区别与实例

mt_rand与rand函数区别与实例 下面我们来看看mt_rand函数的实例吧. function roll () { return mt_rand(1,6); } echo roll(); function roll ($sides) { return mt_rand(1,$sides); } echo roll(6); // roll a six-sided die echo roll(10); // roll a ten-sided die echo roll(20); // roll

php mt_rand与rand函数区别与实例

mt_rand与rand函数区别与实例 下面我们来看看mt_rand函数的实例吧. function roll () { return mt_rand(1,6); } echo roll(); function roll ($sides) { return mt_rand(1,$sides); } echo roll(6); // roll a six-sided die echo roll(10); // roll a ten-sided die echo roll(20); // roll

php explode split str_split函数区别与实例

三个函数都是把一个字符串分割成一个数组,但各有各的用法,下面我们就一一来看关于php explode split str_split函数区别与实例吧. */ $str ="id_99_cn.html"; $array = explode('_',$str); print_r($array); /* array (     [0] => id     [1] => 99     [2] => cn.html ) */ //函数原型:array split (string

php urlencode()函数实现URL编码解析

urlencode (PHP 4, PHP 5) urlencode - 编码 URL 字符串 Report a bug 说明 string urlencode ( string $str ) 此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页. Report a bug 参数 str 要编码的字符串. Report a bug 返回值 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)