PHP中的urlencode,rawurlencode和JS中的encodeURI,encodeURIComponent

【PHP中的urlencode和rawurlencode】
urlencode之前有看过其源码实现PHP 源码阅读笔记二十三 :urlencode函数
二都的区别仅在” “空格上,rawurlencode()会把空格编码为%20,而urlencode会把空格编码为+

【JS中的encodeURI和encodeURIComponent】
encodeURI 方法不会对下列字符进行编码:”:”、”/”、”;” 和 “?”,而encodeURIComponent会编码这些字符

【urlencode与encodeURI】
首先,我们看下这4种编码方式针对ASCII的127个字符编码后的差别,显示代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
/*** 生成urlencode,rawurlencode,encodeURI,encodeURIComponent的编码结果 2010-10-29 sz* @author phppan.p#gmail.com  http://www.phppan.com* 哥学社成员(http://www.blog-brother.com/)* @package test*/
header("Content-type:text/html;charset=utf-8");   echo <<<STYLE <style type="text/css"> table { cursor:default; font-family:Verdana,Helvetica,sans-serif; font-size:8pt; } td { background:none repeat scroll 0 0 #EFEFEF; text-align:center; width:100px; } </style> STYLE; echo '<table >'; echo _tr(_td("ASCII") . _td("urlenocde") . _td("rawurlencode") . _td("encodeURI") . _td("encodeURIComponent")); for ($i = 0; $i < 128; $i++) { $ch = chr($i); $td = _td($ch) . _td(urlencode($ch)) . _td(rawurlencode($ch)); $td .= _td(_encodeURI($ch)) . _td(_encodeURIComponent($ch));   echo _tr($td); } echo "</table>";

对比urlencode和encodeURI的不同,可以看到#$&+,/:;=?@这些符号编码结果不同,
于是对于需要在PHP中编码后,给js的encodeURI使用的操作可以使用如下函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
/*** urlencode适用于js版本 2010-10-29 sz* @author phppan.p#gmail.com  http://www.phppan.com* 哥学社成员(http://www.blog-brother.com/)* @package test*/
header("Content-type:text/html;charset=utf-8");   function urlencode_js($str) { $str_len = strlen($str);   $new = array(); for ($i = 0; $i < $str_len; $i++) { $ch = $str[$i]; if (strpos("#$&+,/:;=?@", $ch) !== FALSE) { $new[] = $ch; } else { $new[] = urlencode($ch); } }   return implode("", $new); }   $encode_str = urlencode_js("a汉bc中文 章+aa#$&+,/:;=?@a汉bc中文 章+aa");   echo <<<HTML <script type="text/javascript"> document.write(decodeURI("$encode_str") + "<br />"); </script> HTML; die();

【urlencode和urldecode的PHP实现】(折腾一个重复轮子玩)
以下代码纯属折腾,如有雷同,不胜荣幸

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

<?php
/*** urlencode和urldecode的PHP版本 2010-10-29 sz* @author phppan.p#gmail.com  http://www.phppan.com* 哥学社成员(http://www.blog-brother.com/)* @package test*/
header("Content-type:text/html;charset=utf-8");   $str = "a汉bc中文 章+aa:/;?()'!-.*_~";   /** * urlencode的PHP实现 * 纯属折腾 其C实现请参照PHP源码 url.c文件中php_url_encode函数 * @param <type> $str * @return <type> */ function myurlencode($str) { $len = strlen($str);   $rs = array(); for ($i = 0; $i < $len; $i++) { $ch = $str[$i]; if ($ch == ' ') { $rs[] = '+'; } else if (!encodecheck($ch)) { $rs[] = strtoupper('%' . dechex(ord($ch) >> 4) . dechex(ord($ch) & 15)); } else { $rs[] = $ch; } }   return implode("", $rs); }   /** * 判断是否为字符和字线以及_-. * 相当于c中的!isalnum(c) && strchr("_-.", c) == NULL(PHP源码) * @param <type> $ch * @return <type> */ function encodecheck($ch) { $pattern = "/[a-zA-Z0-9_\-\.]/"; return preg_match($pattern, strval($ch)); }   /** * 判断是否为16进制数 * @param <type> $ch * @return <type> */ function checkhex($ch) { $hexstr = "0123456789ABCDEF"; return strpos($hexstr, strval($ch)) === FALSE ? FALSE : TRUE; }   /** * urldecode的PHP实现 * 纯属折腾 * @param <type> $str * @return <type> */ function myurldecode($str) { $len = strlen($str);   $rs = array(); for ($i = 0; $i < $len; $i++) { $ch = $str[$i]; if ($ch == '+') { $rs[] = ' '; } else if ($ch == '%' && isset($str[$i + 1]) && checkhex($str[$i + 1]) && isset($str[$i + 2]) && checkhex($str[$i + 2])) { $rs[] = chr(hexdec($str[$i + 1] . $str[$i + 2])); $i += 2; } else { $rs[] = $ch; } }   return implode("", $rs); }   /* 测试 */ echo $str, '<br />'; echo urldecode(myurlencode($str)), '<br />'; echo myurldecode(urlencode($str)), '<br />'; die();

以上算是对urlencode和urldecode实现的一次复习吧。

–EOF–

PHP中的urlencode,rawurlencode和JS中的encodeURI,encodeURIComponent相关推荐

  1. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

  2. php中正则表达式用法,php与js中的正则表达式用法

    1. php中的正则: if(preg_match('/^[^x00-xff]+$/', $_POST['password']) || !preg_match('/^\w+$/', $_POST['p ...

  3. js mysql json字符串转数组中_php数据库数据转换为js中的json对象

    / 1.在company数据user表中取出10条数据,保存为数组 2.在将数组转化为json格式,传递给js 3.用json解析器将传递过来的json字符串转化为json对象, 4.用documen ...

  4. jquery中的map()方法与js中的map()方法

    1.jquery中的map()方法 首先看一个简单的实例: $("p").append( $("input").map(function(){ return $ ...

  5. html事件中写js,html标签中绑定触发事件与js中绑定触发事件写法上的区别

    html> js中方法名后加括号和不加口号的区别 按钮 var test = function(){ var span = document.createElement("span&q ...

  6. html中splice向数组添加元素,js中splice()的强大(删除,插入或替换数组的元素)

    1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数) 2.插入-向数组指定位置插入任意项元素.三个参数,第一个参数(其实位置),第二个参数(0),第三个参数( ...

  7. js 中 java 代码_在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...

  8. html中index是什么作用,js中index是什么意思

    怀孕7周孕酮正常值患者信息:女 25岁 福建 厦门 病情描述(发病时间.主要症状等): 我老婆病情分析: 欢迎来到CSS布局HTML,怀孕7周左右孕酮值在76.7nmol/L左右为正常,你的孕酮值是偏 ...

  9. 后端响应的字符串“true”,在JS中不等于“true”?JS中if(“true“ == “true“),结果为false?

    答案:JS中if("true" == "true") 结果当然为true.只是因为响应的数据最后带有回车"\n",if("true ...

最新文章

  1. c#读取xml文件配置文件Winform及WebForm-Demo具体解释
  2. 随手记一次用C#正则表达式获取下拉菜单html标签select以及相关属性值
  3. bash命令的使用方法
  4. 64位ubuntu kylin 16.04下tiny4412开发环境搭建
  5. JDBC学习笔记 day1
  6. java1.8输出语句_[【小白学Java——干货】1.初学Java,认识语法、变量与输出语句...
  7. MariaDB 10.4.9 发布,MySQL 分支数据库
  8. kk服务器信息及端口,kk服务器设置
  9. Entity Framework 5.0系列之Code First数据库迁移
  10. LeetCode 387:first-unique-character-in-a-string
  11. 1018. Public Bike Management (30)
  12. [置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
  13. ASP.NET 2.0 Internet安全之参考实现
  14. hdu2084数塔----DP入门
  15. journalctl命令使用
  16. 开机预读快还是不预读快_启用预读为网页浏览提速
  17. 【头歌C语言程序与设计】结构体
  18. 笔记本在Win7/Win8/win8.1下安装OS X 10.9.3懒人版通用教程
  19. 手把手教你设计短信验证码
  20. 【复变函数与积分变换】05. 留数

热门文章

  1. 利用nginx+tomcat+memcached组建web服务器负载均衡
  2. 转:项目报告应该汇报什么内容?
  3. javascript图片浏览器的核心——图片预加载
  4. hive数据导入导出
  5. php 去除实体,php – 如何在学说中正确关闭实体管理器
  6. 怎么计算另一个表格内某几列的和_Excel 函数(一) – 用 evaluate 函数自动计算
  7. 快速解决mongodb出现id重复问题
  8. 在 Ubuntu 上安装最新版本的 Erlang方法介绍
  9. wtl中显示html,用WTL构建HTML界面应用程序(1)
  10. 如何优化linux服务器,手把手教你如何优化linux服务器