一個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