2
在编写一个简单的cgi shell脚本代理服务器来包装一个jsonp风格的回调函数的xml时,我碰到了一个转义反斜杠的问题(这是通过反复试验和Opera的优秀调试器解决的)。我仍然试图找出为什么需要额外的反斜杠(8对4)。我明白,每次解析都需要加倍反斜杠的数量,但是我似乎忽略了某处的迭代,或者误解了处理。它在浏览器中被解析两次吗?为什么我需要8个反斜杠?
这是我想为什么它
#!/bin/sh
CB=${QUERY_STRING%%&*}
URL=${QUERY_STRING#*&}
case "$CB" in
callback=*)
printf "Content-type: application/javascript\r\n\r\n${CB##*=}(\""
wget -q --no-check-certificate -U "NetSurf/2.9 (Linux; i686)" -T 20 -O - "$URL" \
|tr -c [\ -~] " "|sed "s/[\\]/\\\\\\\\/g;s/[\"]/\\\\\"/g"
printf "\")"
;;
*)exit;;
esac
这里是我使用(编辑 - 用更简单的非gzip的版本替换)测试页找出最后的工作代码。
<html><head><title>test</title></head><body><div id="notaniframe"></div>
<script>
function dummy(data){document.getElementById("notaniframe").innerHTML=data}
Loaded=0
setTimeout(function(){if(!Loaded)alert("load failed")},30000);
</script>
<script onload='Loaded=1' src="http://localhost/cgi-bin/xml2jsonp.cgi?callback=dummy&http://stackoverflow.com"></script>
</body></html>
这只是的CRAM stackoverflow.com成
'sed的“S/[\]/\\\\/g; s/[“]/\\”/ g''正是我所错过的,我不知道为什么我这次用sed使用双引号。谢谢。 – technosaurus 2013-03-10 02:46:56
@technosaurus:不客气! – ruakh 2013-03-10 07:05:52