• 使用 shell 写 cgi 程序中的 urldecode
    时间:2009-01-02   作者:佚名   出处:互联网

    使用 shell 写 cgi 程序时, 从 QUERY_STRING 获取的由 url 或者 form 表单提交的字串已经是经过 urlencode 的了.

    php 的 中有 urlencode 和 urldecode 来对字串进行解码. 但 shell 中没有.

    今天恰好要用, 就搜索了一下, 找到一个使用 awk 来进行 urldecode 的脚本, 参见http://www.chinaunix.net/bbsjh/11/617.html , 复制下来无法直接进行, 做了一点调整之后好用了, 另外其中的 空格" " 转 "+" 的做反了.

    因此, 在处理这个字串时得先进行 urldecode

    urldecode.awk
    [code:1]
    #!/usr/bin/awk -f

    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}
    [/code:1]

    注意, 如果你的 awk 程序路径不一样, 请按实际情况修改.

    实例:
    [code:1]
    $> echo "abc%2Babc+abc" | urldecode.awk
    abc+abc abc
    $> echo "%D6%D0%B9%FA%D6%D0%B9%FA " | urldecode.awk
    中国中国
    [/code:1]

    网友留言/评论

    我要留言/评论