1

我正在尝试将参数传递给 python cgi 脚本,该参数包含加号运算符。

 /cgi-bin/test.py?input=print%20"%20"%20"%20%20-+-\"

python cgi 脚本很简单:

#!/usr/bin/python -w
import cgi
fs = cgi.FieldStorage()

print "Content-type: text/plain\n"
strE=fs.getvalue("input")
print strE

我的输出是:

 print " " "  - -\"

我不明白为什么“+”加号运算符被空格代替,我该如何传递“+”加号运算符?

编辑

@Tom Anderson,回答了我的问题,我想进一步扩展我的问题。

我有一个调用获取带有参数的 url 的 java-script 函数:

            <script type="text/javascript">

            function PostContentEditable(editableId,targetOutput)
            {
                        var texthtml = document.getElementById(editableId).innerHTML
                        var tmp = document.createElement("DIV");
                        tmp.innerHTML = texthtml ;
                        var str= tmp.textContent||tmp.innerText;

                        var xmlhttp;
                        if (str.length == 0){
                            document.getElementById(targetOutput).innerHTML = "";
                            return;
                        }
                        if(window.XMLHttpRequest){
                            xmlhttp=new XMLHttpRequest();
                        }
                        else{
                            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        xmlhttp.onreadystatechange=function(){
                            if (xmlhttp.readyState==4 && xmlhttp.status==200){
                                 document.getElementById(targetOutput).innerHTML=xmlhttp.responseText;
                            }
                        }

                        xmlhttp.open("GET","../cgi-bin/exercise.py?input="+str,true);
                        xmlhttp.send();
            }
            </script>

是否有一个自动内置功能可以将所有特殊字符替换为我需要的?

  str = escapeStringToNativeUrl(str) ?
4

1 回答 1

5

在 URL 的查询部分,+是一个特殊的代码,表示一个空格。

这是因为 HTML 规范中有关表单的部分指定表单数据被编码为application/x-www-form-urlencoded查询字符串。在该编码中,空格字符被替换为 `+'

因此,Python 正确解码了您的输入。

如果要传递实际的加号,则需要将其百分比编码%2B.

在 JavaScript 中,我相信构建查询字符串的正确方法是使用encodeURIComponent.

于 2012-07-28T08:20:08.333 回答