小编Ser*_*erg的帖子

urlencode 函数

我需要一种在运行旧版 busybox 的 OpenWRT 设备上使用 shell 脚本对字符串进行 URL 编码的方法。现在我最终得到了以下代码:

urlencode() {
echo "$@" | awk -v ORS="" '{ gsub(/./,"&\n") ; print }' | while read l
do
  c="`echo "$l" | grep '[^-._~0-9a-zA-Z]'`"
  if [ "$l" == "" ]
  then
    echo -n "%20"
  else
    if [ -z "$c" ]
    then
      echo -n "$l"
    else
      printf %%%02X \'"$c"
    fi
  fi
done
echo ""
}
Run Code Online (Sandbox Code Playgroud)

这或多或少地工作正常,但有一些缺陷:

  1. 某些字符会被跳过,例如“\”。
  2. 结果是逐个字符返回,因此速度非常慢。对一批中的几个字符串进行 url 编码大约需要 20 秒。

我的 bash 版本不支持像 ${var:x:y} 这样的子字符串。

shell shell-script openwrt busybox ash

6
推荐指数
1
解决办法
3703
查看次数

标签 统计

ash ×1

busybox ×1

openwrt ×1

shell ×1

shell-script ×1