一个shell写的urldecode代码

转自:http://aaronw.me/static/779.html

这是第一种方法:(标点符号会漏掉)

#!/bin/sh
awk ‘
BEGIN {
hextab=”0123456789ABCDEF”
for ( i=1; i<=255; ++i ) ord [i] = sprintf(“%c”,i);
}
{
decoded = “”
for ( i=1; i<=length ($0); ++i ) {
c = substr ($0, i, 1)
if ( c ~ /[a-zA-Z0-9.-]/ ) {
decoded = decoded c             # safe character
} else if ( c == ” ” ) {
decoded = decoded “+”   # special handling
} else if ( c == “%” ) {
hi= substr($0,i+1,1);
low=substr($0,i+2,1);
i++;i++
decoded = decoded ord[(index(hextab,hi)-1)*16+index(hextab,low)-1]
}
}
}
END {print decoded}

这是第二种方法:

#/bin/sh
awk ‘BEGIN {
for(i=0;i<10;i++)
hex[i]=i;
hex["A"]=hex["a"]=10;
hex["B"]=hex["b"]=11;
hex["C"]=hex["c"]=12;
hex["D"]=hex["d"]=13;
hex["E"]=hex["e"]=14;
hex["F"]=hex["f"]=15;
}
{
gsub(/\+/,” “);
i=$0;
while(match(i,/%../)){
if(RSTART>1);
printf”%s”,substr(i,1,RSTART-1);
printf”%c”,hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];
i=substr(i,RSTART+RLENGTH);
}
print i;
}’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值