Script Python CGI, no puedo pasar el operador '+' más como parámetro

Estoy tratando de pasar un parámetro a un script cgi de python, este parámetro contiene el operador más.

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

El script python cgi es simple:

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

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

mi salida es:

 print " " "  - -\"

No entiendo por qué el operador más '+' se sustituye por un espacio. ¿Cómo puedo pasar el operador más '+'?

EDITAR

@Tom Anderson, respondió mi pregunta y quiero extender mi pregunta un poco más.

Tengo una función java-script que invoca obtiene la url con los parámetros:

            <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>

¿Existe una función integrada automática que reemplace todos los caracteres especiales por los que necesito?

  str = escapeStringToNativeUrl(str) ?

preguntado el 28 de julio de 12 a las 09:07

1 Respuestas

En la parte de consulta de la URL, + es un código especial que significa un espacio.

Esto se debe a que la parte de la especificación HTML relativa a los formularios especifica que Los datos del formulario se codifican como application/x-www-form-urlencoded en una cadena de consulta. En esa codificación, los caracteres de espacio se reemplazan por '+'.

Entonces, Python está decodificando correctamente su entrada.

Si desea pasar un plus real, deberá porcentaje de codificación como %2B.

En JavaScript, creo la forma correcta de construir la cadena de consulta es con encodeURIComponent.

Respondido 07 Oct 21, 06:10

Gracias, gran respuesta, ¿dónde puedo encontrar los accesos directos para esos caracteres especiales? - Michael

He editado mi pregunta, ¿hay alguna función en java-script que transfiera mi cadena a la URL correcta? - Michael

El espacio es el único que recibe un trato especial. Para todo lo demás, si es un carácter sin reservas puede usarlo tal como está, y si no, debe estar codificado en porcentaje. - Tom Anderson

Gracias, me ahorraste algo de tiempo. Michael

No soy un experto en JS, pero alguien más ya respondió eso, así que agregué un enlace a su respuesta. - Tom Anderson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.