`
finesky6_11
  • 浏览: 4049 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

url 校验及解析

阅读更多
<!DOCTYPE html>
<html>
<head>

<meta charset="utf-8" />
<title>test</title>

<script src="jquery-1.5.min.js"></script>
</head>
<body>
<script>

/* MyURL class */
var MyURL = (function() {
//"http://google.com" => {href: "", protocol: "", ...}
function _parseurl(str) {
var reg = /^(?:([a-zA-Z]+):)?(\/{0,3})([0-9.\-a-zA-Z]+)(?::(\d+))?(?:\/([^?#])*)?(?:\?([^#]*))?(?:#(.*))?$/;
if(!reg.test(str)){
alert("erro url");
return;
}
var objOut = {};
var arrObj = reg.exec(str);
objOut["href"] = arrObj[0];
objOut["protocol"] = arrObj[1];
objOut["hostname"] = arrObj[3];
var start =0;
for(var i=1;i<4;i++){
start = start + parseInt(arrObj[i].length);
}
//show exist search or hash or pathname
if(str.length > (start + 2)){
start = start + 1;
var str2 = str.substring(start),
flag1 = str.indexOf("?"),
flag2 = str.indexOf("#");
endStr = 0;
if(flag1 == -1 && flag2 == -1){// no exist ? or #
endStr = str2.length;
}else if(flag1 != -1 && flag2 == -1){// exist ? no #
endStr = str2.indexOf("?");
var arrStr = str2.substring(endStr).split("?");
objOut["search"] = "?" + arrStr[1];
}else if(flag1 == -1 && flag2 != -1){// exist $ no ?
endStr = str2.indexOf("#");
var arrStr = str2.substring(endStr).split("#");
objOut["hash"] = "#" + arrStr[1];
}else if(flag1 != -1 && flag2 != -1){// exist $ no ?
if(flag1 > flag2){// # be seated on front
endStr = str2.indexOf("#");
var arrStr = str2.substring(endStr).split("?");
objOut["search"] = "?" + arrStr[1];
objOut["hash"] = arrStr[0];
}else{//? be seated on front
endStr = str2.indexOf("?");
var arrStr = str2.substring(endStr).split("#");
objOut["search"] =  arrStr[0];
objOut["hash"] = "#" + arrStr[1];
}
}
objOut["pathname"] =  str2.substring(0,endStr);
}
return objOut;
}
//{a: 1, b: 2} => "a=1&b=2"
function _serialize(obj) {
var arrTemp = [];
for(var key in obj) {
arrTemp.push([key, obj[key]].join("="));
}
return arrTemp.join("&");
}
//"a=1&b=2" => {a: 1, b: 2}
function _deserialize(str) {
var objOut = {},
arrTemp1 = [],
arrTemp2 = str.split("&");
for(var i = 0, len = arrTemp2.length; i < len; i++) {
arrTemp1 = arrTemp2[i].split("=");
objOut[arrTemp1[0]] = arrTemp1[1];
}
return objOut;
}

return function(url) {
var _hash = "",
_hostname = "",
_href = "",
_pathname = "",
_port = "",
_protocol = "",
_search = "",
_query = {};

function _updateToSearch() {
if(jQuery.isEmptyObject(_query)) {
_search = "";
return;
}
_search = "?" + _serialize(_query);
}
function _updateFromSearch() {
if(!_search) {
_query = {};
return;
}
_query = _deserialize(_search.slice(1));
}
function _updateToHref() {
_href = [
_protocol,
"//",
_hostname,
_port ? ":" + _port : _port,
_pathname,
_search,
_hash
].join("");
}
function _updateFromHref() {
_hash = "",
_hostname = "",
_pathname = "",
_port = "",
_protocol = "",
_search = "",
_query = {};
}
function _init(obj) {
_hash = obj["hash"] || "";
_hostname = obj["hostname"] || "";
_href = obj["href"] || "";
_pathname = obj["pathname"] || "";
_port = obj["port"] || "";
_protocol = obj["protocol"] || "";
_search = obj["search"] || "";
_query = _deserialize(_search) || {};
}

this.hash = function(value) {
if(value) {
_hash = value;
_updateToHref();
return this;
} else {
return _hash;
}
};
this.hostname = function(value) {
if(value) {
_hostname = value;
_updateToHref();
return this;
} else {
return _hostname;
}
};
this.href = function(value) {
if(value) {
_href = value;
_updateFromHref();
return this;
} else {
return _href;
}
};
this.pathname = function(value) {
if(value) {
_pathname = value;
_updateToHref();
return this;
} else {
return _pathname;
}
};
this.port = function(value) {
if(value) {
_port = value;
_updateToHref();
return this;
} else {
return _port;
}
};
this.protocol = function(value) {
if(value) {
_protocol = value;
_updateToHref();
return this;
} else {
return _protocol;
}
};
this.search = function(value) {
if(value) {
_search = value;
_updateToHref();
_updateFromSearch();
return this;
} else {
return _search;
}
};
this.query = function(key, value) {
switch(typeof key) {
case "string":
if(value) {
_query[key] = value;
_updateToSearch();
_updateToHref();
return this;
} else {
return _query[key];
}
break;
case "object":
for(var k in key ) {
_query[k] = key[k];
}
_updateToSearch();
_updateToHref();
return this;
break;
case "undefined":
return _query;
break;
default:
return this;
}
};

//constructor code
switch(typeof url) {
case "string":
_init(_parseurl(url));
break;
case "object":
_init(url);
break;
default:
_init(location);
}
}
})();

//
var obj = new MyURL("http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Semicolons#Semicolons");


</script>

</body>
</html>
分享到:
评论

相关推荐

    java正则表达式获取url的host示例

    使用httpclient抓取页面信息时需要填写HOST,使用此正则提取抓取URL的HOST内容

    Spring MVC 3.0实战指南.ppt

    6、视图及解析器 7、其它 目录: Spring MVC 3.0新特性 Spring MVC框架结构 Spring MVC框架结构 框架的实现者 目录 HTTP请求映射原理 Spring MVC进行映射的依据 通过URL限定:URL表达式 通过URL限定:绑定{xxx}中的值 ...

    Spring3MVC注解教程.ppt

    6、视图及解析器 7、其它 目录: Spring MVC 3.0新特性 Spring MVC框架结构 Spring MVC框架结构 框架的实现者 目录 HTTP请求映射原理 Spring MVC进行映射的依据 通过URL限定:URL表达式 通过URL限定:绑定{...

    java获取百度网盘真实下载链接的方法

    主要介绍了java获取百度网盘真实下载链接的方法,涉及java针对URL操作及页面分析的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    智能GPT图书管理系统.zip

    (SpringBoot2+Vue2),全局异常拦截器,登录校验拦截器,Echarts展示借阅量,可添加爬虫功能获取图书数据。API认证采用JWT。后端CORS跨域支持。HTTP Status Code表示状态。数据返回格式JSON。 爬虫(Web Crawler)是...

    停车场系统源码,新能源充电桩系统,停车场小程序,智能停车,Parking system.zip

    【功能介绍】:①兼容市面上主流的多家相机,理论上兼容所有硬件,可灵活扩展,②相机识别后数据自动上传到云端并记录,校验相机唯一id和硬件序列号,防止非法数据录入,③用户手机查询停车记录详情… 爬虫(Web ...

    停车场系统源码,停车场小程序,智能停车,Parking system.zip

    【功能介绍】:①兼容市面上主流的多家相机,理论上兼容所有硬件,可灵活扩展,②相机识别后数据自动上传到云端并记录,校验相机唯一id和硬件序列号,防止非法数据录入,③用户手机查询停车记录详情可自主缴费 ...

    apache-commons源码及jar文件

    (附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 JavaBean 映射至 XML 文档,以及相反映射的服务. Chain Chain 提供...

    webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid-python

    webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid webargs 主页:https://webargs.readthedocs.io/ webargs 是一个用于解析和验证 HTTP 请求对象的...

    java版ss源码-php-iban:用PHP生成、解析、验证、纠错和显示IBAN(和IIBAN)银行账户信息

    URL也可以查询以简化集成。 IBAN 可以在人类和机器表示之间转换。 IBAN 可能会被混淆,以便在特殊情况下(例如亲属身份)向人类展示。 包括来自不同国家的示例/测试 IBAN 数据库。 最后,当检测到不正确的 IBAN 并且...

    Ajax请求和Filter配合案例解析

    现在有这样一个问题,就是在提交大片文字评论的时候,前台拿到数据之后给后台发送ajax请求,然后后台有一个防止SQL注入的Filter,这个Filter得到这个前台传过来的数据之后,进行合法性校验,如果没有校验成功,那么...

    企业微信代开发应用回调代码

    3.按照企微规范定义controller的接收值,能实现企微代开发回调的GET校验,POST传值,快速响应,异步处理。 4.按照企微规范实现回调数据的验签解析。开发人员只需要注重自己的业务代码。 4.按照企微规范提供丰富的...

    WebSpider 网页抓取 v5.1

    *抓取信息的准确性高,系统提供了强大的数据校验功能,保证了数据的正确性 *支持断点续抓,在当机或出现异常情况后可以恢复抓取,继续后续的抓取工作,提高了系统的抓取效率 *对于列表页,支持翻页,可以抓取到...

    网络蜘蛛-强势

    *抓取信息的准确性高,系统提供了强大的数据校验功能,保证了数据的正确性 *支持断点续抓,在当机或出现异常情况后可以恢复抓取,继续后续的抓取工作,提高了系统的抓取效率 *对于列表页,支持翻页,可以抓取到...

    解析PHP 使用curl提交json格式数据

    复制代码 代码如下:$data = array(“name” =&gt; “Hagrid”, “age” =&gt; “36”);$data_string = json_encode($data); ...curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);curl_setopt($ch, CURLOPT_POSTFIELDS,$...

    Web安全之SQL注入

    SQL注入是指将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。当Web应用程序的开发人员对用户所输入的数据不进行过滤或验证(即存在注入点...

    百度地图开发java源码-HttpDownload:基于socket的http多线程下载

    基于socket的http多线程下载,传入的url(这个url必须是可以下载的、请求资源的连接)、下载的线程数、保存的本地位置这三个参数,然后通过解析url,获取host、path、port等信息来组装报文。 先发送head请求来获得...

    java命名规范 开发规范

    3. 解析该HTTP请求返回值(XML或JSON); 4. 响应结果; 5. 测试; 备注: 开发一个需要对第三方应用发布的WebService 步骤: a. 开发WebService接口,@WebService进行注解该接口; b. 开发WebService接口实现类...

    JavaScript对象验证库js-validator.zip

    url验证域必须为URL地址。当前不支持含有非英文(中文等)字符的地址。测试文件入口./test/index.html  原生JavaScript支持测试./test/node.js Node.js支持测试./test/requirejs.html RequireJS支持测试./test/...

    读秀批量下载工具2014最新版.rar

    说明:某些网络问题导致解析时提示"不可达URL"时,请稍微等一会在下,最好把在线视频,下载,上传等软件关闭,等网络状况比较好的时候在下载5.说明:某些特殊图书在用大图模式下载时会出现怎么也下载不了的现象,请稍后在...

Global site tag (gtag.js) - Google Analytics