我需要一种在运行旧版 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)
这或多或少地工作正常,但有一些缺陷:
我的 bash 版本不支持像 ${var:x:y} 这样的子字符串。