我正在使用bash shell,我正在尝试通过一个html页面,通过URL循环传递给我的cgi脚本的每个参数。我不确定在“$ @”中使用i是否正在做我需要的事情。我需要循环遍历URL传递的每个参数。
for site in "$@"
do
p=`links -dump $site`
done
示例网址如下:
cgi/word?http://en.wikipedia.org/wiki/Wienermobile+http://en.wikipedia.org/wiki/Apple
两个网址是我的参数。
我非常擅长在网页和脚本之间使用和使用cig,如果这是一个简单的修复,请原谅。
答案 0 :(得分:1)
您提供的示例实际上并不是有效的网址,因为它未正确转义(例如,请参阅维基百科的“百分比编码”)
cgi/word?http://en.wikipedia.org/wiki/Wienermobile+http://en.wikipedia.org/wiki/Apple
应该更像是
cgi/word?http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWienermobile%20http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FApple
HTTP不是一个简单的协议,您可能最好使用框架,而不是在shell中编写(这会增加shell附带的所有陷阱的安全风险)
但只是为了它的乐趣,这是一个shell中的示例CGI脚本,它解码查询字符串。
#!/bin/sh
percentdecode() {
/usr/bin/printf "$(/usr/bin/printf %s "$1" | sed -e 's/%/\\x/g; s/+/ /g')"
}
qsdecode() (
IFS=\&
for kv in $QUERY_STRING ; do
IFS==
set -- $kv
if [ $# -ne 2 ]; then
echo "Not a valid key-value pair: $kv"
continue
fi
k=$(percentdecode "$1")
v=$(percentdecode="$2")
echo "Key: $k"
echo "Value: $v"
done
}
cat <<'EOF'
Status: 200 OK
Content-Type: text/plain; charset=UTF-8
EOF
qsdecode
这解析传输密钥值存储的传统查询字符串格式
?a=b&c=d&e=f
。建议您最好遵循此格式格式。如果你必须使用?value1+value2+value3
这样的东西,那么解析非常简单:
decode_plusdelimited() (
unset IFS
# percentdecode maps '+' and '%20' to ' '
for value in $(percentdecode "$QUERY_STRING"); do
echo "Got value: $value"
done
)
(请注意,您没有给出加分格式的精确规范,所以这只是一个近似值)