Python script CGI, no soy capaz de pasar a '+' operador más como un parámetro
-
13-12-2019 - |
Pregunta
Estoy tratando de pasar un parámetro a una de python script cgi, este parámetro contiene el operador más.
/cgi-bin/test.py?input=print%20"%20"%20"%20%20-+-\"
El python script 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 resultado es:
print " " " - -\"
No entiendo por qué el '+' plus operador es sustituido por el espacio, ¿Cómo puedo pasar el '+' operador más?
EDITAR
@Tom Anderson, respondió a mi pregunta, y quiero extender mi pregunta un poco más.
Tengo un script de java de la función que invoca obtiene la dirección 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>
Hay un automáticas integradas en la función que reemplaza todos los caracteres especiales para lo que necesito?
str = escapeStringToNativeUrl(str) ?
Solución
En la parte de consulta de la URL, +
es un código especial que significa un espacio.
Esto es porque la parte de la especificación de HTML sobre las formas especifica que formulario de datos se codifica como application/x-www-form-urlencoded
en una cadena de consulta.En esa codificación, los caracteres de espacio son reemplazados por `+'.
Así, Python es correctamente decodificación de la entrada.
Si quieres pasar un plus, usted necesitará por ciento-codificar como %2B
.
En JavaScript, creo la manera correcta de construir la cadena de consulta es con encodeURIComponent
.