При написании простейшего прокси-сервера скрипта cgi оболочки, в котором выполняется перенос цитированного xml в обратном вызове в стиле jsonp, я столкнулся с проблемой с экранированием обратной косой черты (которая была решена путем проб и ошибок и превосходным отладчиком 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
Вот тестовая страница, которую я использую (Edit - заменена более простой, не 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>
Это просто переполняет stackoverflow.com в DIV
'СЭД«s/[\]/\\\\/g; s/["]/\\"/g'' было именно тем, что мне не хватало, я не знаю, почему на этот раз я использовал двойные кавычки с sed. Благодарю. – technosaurus
@technosaurus: Добро пожаловать! – ruakh