你給的例子實際上不是一個有效的URL,因爲它不是正確轉義(見「百分比編碼」在維基百科爲例)
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中的示例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
)
(請注意,您沒有給加分隔格式的精確規範,所以這只是一個近似值)