一个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;
}’


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM