对url中的参数进行转码

Python025

对url中的参数进行转码,第1张

url参数进行转码的方式:

1.encodeURI()

2.encodeURIComponent()

3.Base64.encode

示例1:

var url = " https://www.baidu.com/index.php?t= 仪表盘&&ss=dash&&vv=星星"

encodeURI(url)

-->

示例2:

var url = " https://www.baidu.com/index.php?t= 仪表盘&&ss=dash&&vv=星星"

encodeURIComponent(url)

-->

示例3:

是只对参数进行转码,使用split对url进行拆分

var url = " https://www.baidu.com/index.php?t= 仪表盘&&ss=dash&&vv=星星"

var newSearch = url.split('?')[1].split('&&').map(item =>{

const params = item.split('=')

return ${params[0]}=${encodeURIComponent(params[1])}

}).join('&&')

url = ${url.split('?')[0]}?${newSearch}

console.log(url)

注意:如果转码过后的url需要打开一个新的页面,chrome上会对转码的url进行解码,这样会达不到相应的转码效果。

可以使用Base64.encode替换encodeURIComponent

var url = " https://www.baidu.com/index.php?t= 仪表盘&&ss=dash&&vv=星星"

var newSearch = url.split('?')[1].split('&&').map(item =>{

const params = item.split('=')

return ${params[0]}=${Base64.encode(params[1])}

}).join('&&')

url = ${url.split('?')[0]}?${newSearch}

console.log(url)

类似这样的效果: https://www.baidu.com/index.php?tn=5paH5pyL55qE5Luq6KGo55uY&&sss=ZGFzaGJvYXJkLWFsbDE1NTU2NjQyMjE5MDk=

如果是直接获取网上的url可以

const newSearch = location.search.substring(1).split('&').map(item =>{

const params = item.split('=')

return ${params[0]}=${encodeURIComponent(params[1])} }).join('&')

${location.href.split('?')[0]}?${newSearch}

首先你的理解是错的,不管用户态的API(syscall)是否是同步还是异步,在kernel层面都是异步的。

其实实现原理很简单,就是利用C(嵌入汇编)语言可以直接修改寄存器(setcontext/setjmp/longjmp均是类似原理,修改程序指针eip实现跳转,栈指针实现上线文切换)来实现从func_a调进去,从func_b返回出来这种行为。对于golang来说,func_a/func_b属于不同的goroutine,从而就实现了goroutine的调度切换。

另外对于所有可能阻塞的syscall,golang对其进行了封装,底层实际是epoll方式做的,注册回调后切换到另一个runnable的goroutine。