当前位置: 亚洲城ca88 > ca88 > 正文

浅谈php中urlencode与rawurlencode的分别

时间:2019-07-12 07:21来源:ca88
近些日子说自个儿遭遇了个《U凯雷德L加号引发错误》的BUG,引起这一个bug的因由正是温馨在UTucsonL中应用了urlencode函数,该函数会把空格转变来加号,那样就导致UMustangL分析出错,而空

近些日子说自个儿遭遇了个《U凯雷德L加号引发错误》的BUG,引起这一个bug的因由正是温馨在UTucsonL中应用了 urlencode 函数,该函数会把空格转变来加号,那样就导致UMustangL分析出错,而空格只有调换来 才方可能够符合规律深入分析,那时大家就必要运用 rawurlencode 函数。

近期说自个儿遇到了个《U瑞鹰L加号引发错误》的BUG,引起这几个bug的来由正是上下一心在U奥迪Q5L中央银行使了 urlencode 函数,该函数会把空格转变到加号,那样就导致U福睿斯L深入分析出错,而空格独有转变来 才方可能够健康深入分析,那时大家就需求接纳 rawurlencode 函数。上边就介绍一下 urlencode 函数与 rawurlencode 函数的差距:

近期说本身蒙受了个《UENCOREL加号引发错误》的BUG,引起那几个bug的由来就是友善在ULX570L中利用了 urlencode 函数,该函数会把空格转变到加号,那样就招致U福特ExplorerL分析出错,而空格独有调换到 工夫够能够不荒谬分析,那时大家就必要运用 rawurlencode 函数。下边就介绍一下 urlencode 函数与 rawurlencode 函数的分别:

上边就介绍一下 urlencode 函数与 rawurlencode 函数的分裂:

urlencode 函数:

urlencode 函数:

urlencode 函数:

再次回到字符串,此字符串中除了 -_. 之外的保有非字母数字字符都将被沟通成百分号(%)后跟两位十六进制数,空格则编码为加号( )。此编码与 WWW 表单 POST 数据的编码格局是一律的,同不正常候与 application/x-www-form-urlencoded 的媒体类型编码方式同样。由于历史由来,此编码在将空格编码为加号( )方面与 TiguanFC1738 编码(参见 rawurlencode())不一样。

再次来到字符串,此字符串中除去 -_. 之外的享有非字母数字字符都将被交换到百分号(%)后跟两位十六进制数,空格则编码为加号( )。此编码与 WWW 表单 POST 数据的编码格局是平等的,同期与 application/x-www-form-urlencoded 的传播媒介类型编码方式同样。由于历史原因,此编码在将空格编码为加号( )方面与 卡宴FC1738 编码(参见 rawurlencode())不一致。

再次回到字符串,此字符串中除去 -_. 之外的具有非字母数字字符都将被替换到都百货分号(%)后跟两位十六进制数,空格则编码为加号( )。此编码与 WWW 表单 POST 数据的编码形式是大同小异的,同有时候与 application/x-www-form-urlencoded 的媒体类型编码方式同样。由于历史由来,此编码在将空格编码为加号( )方面与 SportageFC1738 编码(参见 rawurlencode())不相同。

rawurlencode 函数:

rawurlencode 函数:

rawurlencode 函数:

回到字符串,此字符串中除了 -_. 之外的有所非字母数字字符都将被轮换到都百货分号(%)后跟两位十六进制数。那是在 » KugaFC 3986 中陈述的编码,是为了维护原义字符避防其被批注为非常的 UHavalL 定界符,同期爱惜 UEvoraL 格式防止其被传输媒体(像有的邮件系统)使用字符转变时弄乱。上面大家来看一下例证:

重返字符串,此字符串中除了 -_. 之外的具有非字母数字字符都将被替换到百分号(%)后跟两位十六进制数。那是在 » ENCOREFC 3986 中叙述的编码,是为了维护原义字符防止其被讲明为卓绝的 U普拉多L 定界符,同不时候尊崇 U奥迪Q7L 格式以防其被传输媒体(像一些邮件系统)使用字符调换时弄乱。上边大家来看一下事例:

归来字符串,此字符串中除了 -_. 之外的富有非字母数字字符都将被调换到都百货分号(%)后跟两位十六进制数。那是在 » 陆风X8FC 3986 中描述的编码,是为了维护原义字符防止其被解释为独特的 UTiggoL 定界符,同时有限支撑 ULX570L 格式以防其被传输媒体(像某些邮件系统)使用字符转变时弄乱。下边大家来看一下例证:

 代码如下

 代码如下

<?php

$string = "hello world";

echo urlencode($string) . '<br/>'; //输出:hello world
echo rawurldecode($string) . '<br/>';//输出:hello world

?>

<?php

复制代码

实际事例相比较:

$string = "hello world";

<?php

<?php
for ($i = 0x20; $i < 0x7f; $i  ) { 
$str .= dechex($i); 
}

$asscii = pack("H*",$str); 
echo "所有的可打印的asscii字符:(从空格到~)n". $asscii."n"; 
echo "urlencode 的结果:n".urlencode($asscii); 
echo "n"; 
echo "urlencode 不做编码的字//www.jb51.net/符:n".preg_replace("/%.{2}/","",urlencode($asscii)); 
echo "n"; 
echo "rawurlencode 的结果:n".rawurlencode($asscii); 
echo "n"; 
echo "rawurlencode 不做编码的字符:n".preg_replace("/%.{2}/","",rawurlencode($asscii)); 
echo "n";

exit;
?>

输出结果:
———————————————————————————
所有的可打印的asscii字符:(从空格到~)
!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~
urlencode 的结果:
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
urlencode 不做编码的字符:
 -.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
rawurlencode 的结果:
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
rawurlencode 不做编码的字符:
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

echo urlencode($string) . '<br/>'; //输出:hello world
echo rawurldecode($string) . '<br/>';//输出:hello world

$string = "hello world";

比较二者的结果:

?>

echo urlencode($string) . '<br/>'; //输出:hello world
echo rawurldecode($string) . '<br/>';//输出:hello world

1.  数字、大小写字母都不编码
2.  减号、点号、下划线  四个不编码

切切实实事例相比:

?>

  1. rawurlencode比urlencode多编码七个”加号“

 代码如下

实际事例比较:

关于JavaScript中escape与encodeURIComponent的区别:

<?php
for ($i = 0x20; $i < 0x7f; $i ) {
$str .= dechex($i);
}

 代码如下

>>> console.log(encodeURIComponent("统一注册1"));

统一注册1
>>> console.log(escape("统一注册1"));
%u7EDF%u4E00%u6CE8%u518C1

<?php
echo iconv("utf-8","gbk",urldecode("统一注册1")); 
echo "n"; 
echo urldecode("%u7EDF%u4E00%u6CE8%u518C1"); 
// 使用下面的unescape可以
//echo iconv("utf-8","gbk",unescape("%u7EDF%u4E00%u6CE8%u518C1"); 
exit;
?>

输出结果:
======================================
统一注册1
%u7EDF%u4E00%u6CE8%u518C1
======================================

$asscii = pack("H*",$str);
echo "全数的可打字与印刷的asscii字符:(从空格到~)n". $asscii."n";
echo "urlencode 的结果:n".urlencode($asscii);
echo "n";
echo "urlencode 不做编码的字符:n".preg_replace("/%.{2}/","",urlencode($asscii));
echo "n";
echo "rawurlencode 的结果:n".rawurlencode($asscii);
echo "n";
echo "rawurlencode 不做编码的字符:n".preg_replace("/%.{2}/","",rawurlencode($asscii));
echo  "n";

复制代码

结果证实:

exit;
?>

<?php
for ($i = 0x20; $i < 0x7f; $i ) {
$str .= dechex($i);
}

  1. encodeU宝马X5IComponent 总是把输入调换来utf8编码管理的,按字节编码

出口结果:
———————————————————————————
具备的可打字与印刷的asscii字符:(从空格到~)
!"#$%&’()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~
urlencode 的结果:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
urlencode 不做编码的字符:
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
rawurlencode 的结果:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
rawurlencode 不做编码的字符:
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

$asscii = pack("H*",$str);
echo "全数的可打字与印刷的asscii字符:(从空格到~)n". $asscii."n";
echo "urlencode 的结果:n".urlencode($asscii);
echo "n";
echo "urlencode 不做编码的字));
echo "n";
echo "rawurlencode 的结果:n".rawurlencode($asscii);
echo "n";
echo "rawurlencode 不做编码的字符:n".preg_replace("/%.{2}/","",rawurlencode($asscii));
echo  "n";

2. escape是遵照unicode编码管理的,因为它也对url中不安全的字符做了编码,所以也足以在url中做编码使用,但是,服务器端不会活动解码,上边提供三个PHP版的解码函数,是用手册里找的:


exit;
?>

<?php

function unescape($str) { 
  $str = rawurldecode($str); 
  preg_match_all("/(?:%u.{4})|.{4};|d ;|. /U",$str,$r); 
  $ar = $r[0]; 
  foreach($ar as $k=>$v) { 
    if(substr($v,0,2) == "%u") 
      $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4))); 
    elseif(substr($v,0,3) == "") 
      $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1))); 
    elseif(substr($v,0,2) == "") { 
      $ar[$k] = iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1))); 
    } 
  } 
  return join("",$ar); 
}

?>



>>> console.log(escape(" !"#$%&'()* ,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"));
 !"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>> console.log(encodeURIComponent("!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"));
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>> console.log(escape("!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));

* -./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
>>> console.log(encodeURIComponent("!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));
!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~

正如二者的结果:
1.  数字、大小写字母都不编码
2.  减号、点号、下划线  四个不编码

输出结果:
———————————————————————————
负有的可打字与印刷的asscii字符:(从空格到~)
!"#$%&’()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~
urlencode 的结果:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
urlencode 不做编码的字符:
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
rawurlencode 的结果:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
rawurlencode 不做编码的字符:
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

结果相比:

  1. rawurlencode比urlencode多编码八个”加号“

escape未编码的字符: * -./@_   共7个

关于JavaScript中escape与encodeURIComponent的区别:

相比二者的结果:
1.  数字、大小写字母都不编码
2.  减号、点号、下划线  八个不编码

encodeUWranglerIComponent未编码的字符: !'()*-._~  共9个

 代码如下

  1. rawurlencode比urlencode多编码三个”加号“

以上那篇浅谈php中urlencode与rawurlencode的差异正是小编共享给我们的全体内容了,希望能给大家二个参照他事他说加以考察,也希望大家多多援救脚本之家。

>>>  console.log(encodeURubiconIComponent("统一注册1"));

关于JavaScript中escape与encodeURIComponent的区别:

您恐怕感兴趣的篇章:

  • PHP rawurlencode与urlencode函数的深远剖判
  • php的urlencode()UCR-VL编码函数分析
  • PHP中文URL编解码(urlencode()rawurlencode()

统一注册1
>>> console.log(escape("统一注册1"));
%u7EDF%u4E00%u6CE8%u518C1

 代码如下

<?php
echo iconv("utf-8","gbk",urldecode("统一注册1"));
echo "n";
echo urldecode("%u7EDF%u4E00%u6CE8%u518C1");
// 使用下边包车型客车unescape能够
//echo iconv("utf-8","gbk",unescape("%u7EDF%u4E00%u6CE8%u518C1");
exit;
?>

复制代码

出口结果:

统一登记1

>>>  console.log(encodeU福睿斯IComponent("统一注册1"));

%u7EDF%u4E00%u6CE8%u518C1

结果印证:

  1. encodeU君越IComponent 总是把输入转变来utf8编码管理的,按字节编码
    2. escape是依照unicode编码管理的,因为它也对url中不安全的字符做了编码,所以也能够在url中做编码使用,可是,服务器端不会活动解码,上边提供三个PHP版的解码函数,是用手册里找的:

<?php

 代码如下

function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/(?:%u.{4})|&#x.{4};|&#d ;|. /U",$str,$r);
    $ar = $r[0];
    foreach($ar as $k=>$v) {
        if(substr($v,0,2) == "%u")
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
        elseif(substr($v,0,3) == "&#x")
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));
        elseif(substr($v,0,2) == "&#") {
            $ar[$k] = iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
        }
    }
    return join("",$ar);
}

?>

 

>>> console.log(escape(" !"#$%&'()* ,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"));
!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>> console.log(encodeURIComponent("!"#$%&’()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"));
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>> console.log(escape("!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));

* -./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
>>> console.log(encodeURIComponent("!"#$%&’()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));
!’()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~

结果比较:
escape未编码的字符: * -./@_   共7个
ca88,encodeURAV4IComponent未编码的字符: !’()*-._~  共9个

统一注册1
>>> console.log(escape("统一注册1"));
%u7EDF%u4E00%u6CE8%u518C1

<?php
echo iconv("utf-8","gbk",urldecode("统一注册1"));
echo "n";
echo urldecode("%u7EDF%u4E00%u6CE8%u518C1");
// 使用上边包车型地铁unescape能够
//echo iconv("utf-8","gbk",unescape("%u7EDF%u4E00%u6CE8%u518C1");
exit;
?>

出口结果:

统一登记1

%u7EDF%u4E00%u6CE8%u518C1

结果表明:

  1. encodeUHighlanderIComponent 总是把输入转变到utf8编码处理的,按字节编码
    2. escape是安份守己unicode编码管理的,因为它也对url中不安全的字符做了编码,所以也得以在url中做编码使用,但是,服务器端不会自行解码,下边提供二个PHP版的解码函数,是用手册里找的:

<?php

 代码如下

复制代码

function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/(?:%u.{4})|&#x.{4};|&#d ;|. /U",$str,$r);
    $ar = $r[0];
    foreach($ar as $k=>$v) {
        if(substr($v,0,2) == "%u")
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
        elseif(substr($v,0,3) == "&#x")
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));
        elseif(substr($v,0,2) == "&#") {
            $ar[$k] = iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
        }
    }
    return join("",$ar);
}

?>

 

>>> console.log(escape(" !"#$%&'()* ,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"));
!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>> console.log(encodeURIComponent("!"#$%&’()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"));
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>> console.log(escape("!"#$%&'()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));

* -./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
>>> console.log(encodeURIComponent("!"#$%&’()* ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));
!’()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~

结果比较:
escape未编码的字符: * -./@_   共7个
encodeU揽胜IComponent未编码的字符: !’()*-._~  共9个

来自:

编辑:ca88 本文来源:浅谈php中urlencode与rawurlencode的分别

关键词: 亚洲城ca88