很多时候我们有从一个URL中提取域名,查询关键字,变量参数值等的需要,而万万没想到可以让浏览器方便地帮我们完成这一任务而不用我们写正则去抓取。方法就在JS代码里先创建一个a标签然后将需要解析的URL赋值给a的href属性,然后就得到了一切我们想要的了。
var a = document.createElement('a')
a.href = 'htt p:/ /www.jeasyuicn.com/using-dom-analysis-url s.h tml'
console.log(a.host)
利用这一原理,稍微扩展一下,就得到了一个更加健壮的解析URL各部分的通用方法了。
function parseURL(url) {
var a = document.createElement('a')
a.href = url
return {
source: url,
protocol: a.protocol.replace(':',''),
host: a.hostname,
port: a.port,
query: a.search,
params: (function(){
var ret = {},
seg = a.search.replace(/^\?/,'').split('&'),
len = seg.length, i = 0, s
for (i<leni++) {
if (!seg[i]) { continue}
s = seg[i].split('=')
ret[s[0]] = s[1]
}
return ret
})(),
file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
hash: a.hash.replace('#',''),
path: a.pathname.replace(/^([^\/])/,'/$1'),
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
segments: a.pathname.replace(/^\//,'').split('/')
}
}
用法
var myURL = parseURL('htt p:/ /abc.com:8080/dir/inde x.h tml?id=255&m=hello#top')
myURL.file // = 'index.html'
myURL.hash // = 'top'
myURL.host // = 'abc.com'
myURL.query // = '?id=255&m=hello'
myURL.params // = Object = { id: 255, m: hello }
myURL.path // = '/dir/index.html'
myURL.segments// = Array = ['dir', 'index.html']
myURL.port // = '8080'
myURL.protocol// = 'http'
myURL.source // = 'htt p:/ /abc.com:8080/dir/index.h tml?id=255&m=hello#top'
var parseQuery = function(query){var reg = /([^=&\s]+)[=\s]*([^=&\s]*)/g
var obj = {}
while(reg.exec(query)){
obj[RegExp.$1] = RegExp.$2
}
return obj
}
var jerry = parseQuery("name=jerry&age=1")
console.log(jerry)
var tom = parseQuery("name= tom &age=12&gender&")
console.info(tom)
判断URL解码后的结果是不是乱码如下:1、如果是ajax:首先要看看后台进行response输出时,设置的头文件格式是不是utf-8,并且要保证输出的类型为text/html
2、判断浏览器解析的是不是utf-8:看看网页展示的中文是不是乱码,如果是,那么就有可能是没指定解析编码,指定方式如楼上所说,<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />
3、没有说明具体语言,以java为例,看看是否加字符过滤器,进行请求过滤,这个简单,tomcat安装的时候就可以选择安装实例,里面就有现成的,拷过来加进去就行。另外网上到处都是。
4、可以打开 源文件看看是不是源码本身是乱码,这是由于开发工具本身设置的编码格式引起的,如Eclipse、MyEclipse中都有这方面的设置