php urlencode()与urldecode()函数字符编码原理详解
发布时间:2020-12-13 06:02:17 所属栏目:PHP教程 来源:网络整理
导读:其原理就是把中文字符转换为十六进制并按某种规则进行字符串组合,实现字符的编码与解编码,保证URL数据传递过程中字符的完整性和兼容性,主要讨论中文字符的编码情况。 一,FireFox浏览器编码中文字符 在Firefox浏览器下如果输入中文字符,将会自动实现URL
其原理就是把中文字符转换为十六进制并按某种规则进行字符串组合,实现字符的编码与解编码,保证URL数据传递过程中字符的完整性和兼容性,主要讨论中文字符的编码情况。 一,FireFox浏览器编码中文字符在Firefox浏览器下如果输入中文字符,将会自动实现URL编码,如下 按下Enter键前<IMG style="WIDTH: 489px; HEIGHT: 78px" alt=php-internet-url-encode-before src="http:https://files.52php.cn/upload/201112/20111206010518721.png"> 按下Enter键后 <IMG style="WIDTH: 489px; HEIGHT: 78px" alt=php-internet-url-encode src="http:https://files.52php.cn/upload/201112/20111206010519868.png"> 二,urlencode()函数原理 urlencode()函数用于编码URL字符串,这里主要讨论中文字符的编码情况, 实例如下 <div class="codetitle"><a style="CURSOR: pointer" data="79125" class="copybut" id="copybut79125" onclick="doCopy('code79125')"> 代码如下:<div class="codebody" id="code79125"> echo urlencode('不要迷恋哥');//输出:%B2%BB%D2%AA%C3%D4%C1%B5%B8%E7 urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%,了解了这个原理,可以实现自定义的URL编码函数,代码如下 <div class="codetitle"><a style="CURSOR: pointer" data="70839" class="copybut" id="copybut70839" onclick="doCopy('code70839')"> 代码如下:<div class="codebody" id="code70839"> $string = "不要迷恋哥"; $length = strlen($string); echo $string; $result = array(); //十进制 for($i=0;$i<$length;$i++){ if(ord($string[$i])>127){ $result[] = ord($string[$i]).' '.ord($string[++$i]); } } var_dump($result); //十六进制 $strings = array(); foreach($result as $v){ $dec = explode(" ",$v); $strings[] = "%".dechex($dec[0])." "."%".dechex($dec[1]); } var_dump($strings);
三,urldecode()函数原理使用urldecode()函数解码已编码的 URL 字符串,实例如下 echo urldecode('%B2%BB%D2%AA%C3%D4%C1%B5%B8%E7');//输出:不要迷恋哥urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符,结合上面实例,同样可实现自定义函数解码字符串 代码如下: $string = '%B2%BB%D2%AA%C3%D4%C1%B5%B8%E7'; $length = strlen($string); $hexs = array(); for($i=0;$i<$length;$i++){ if($string[$i] == '%'){ $hexs[] = $string[++$i].$string[++$i]; } } $num = count($hexs); for($i=0;$i<$num;$i++){ echo chr(hexdec($hexs[$i])).chr(hexdec($hexs[++$i])); } 上面实例代码首先按字符串的规则取出各个字符的十六进制,然后使用hexdec()函数把十六进制转换为十进制,然后再使用chr()函数把十进制转换为字符,实现十六进制转换为字符。输出结果如下 urlencode(PHP 3,PHP 4,PHP 5) urlencode -- 编码 URL 字符串 说明 string urlencode ( string str ) 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页 urldecode(PHP 3,PHP 5) urldecode -- 解码已编码的 URL 字符串 说明 string urldecode ( string str ) 解码给出的已编码字符串中的任何 %##。返回解码后的字符串。 五,参考资源urlencode()说明 urldecode()说明 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |