2011-10-02 12 views
8

Cuando usomethod = "post" enctype = "text/plain" no son compatibles?

<form method="post" enctype="text/plain" action="proc.php"> 

datos del formulario no se puede enviar a proc.php archivo correctamente. ¿Por qué? ¿Cuál es el problema? ¿Por qué no puedo usar texto/codificación simple con la publicación pero puedo usarlo con el método get?

+6

Estoy bastante seguro de que no es necesario definir enctype, a menos que usted está haciendo una carga de archivos, entonces debería ser: enctype = "multipart/form-data" [link] (http://www.w3.org/TR/html4/interact/forms.html#adef-enctype) – rwyland

+1

De acuerdo con w3schools ([link] (http://www.w3schools.com/tags/att_form_enctype.asp)), 'aplicación/x-www-form-urlencoded' es el predeterminado. –

+0

Mi pregunta es por qué method = "post" y enctype = "text/plain" no funcionan juntos? Mi código HTML no mide y lo que debería usar no importa demasiado !!!!!!!!!!!!!!!!!!! – Narek

Respuesta

21

[Revisado]

La respuesta es, debido a que PHP no se ocupa de él (y que no es un error):

https://bugs.php.net/bug.php?id=33741

Valid values for enctype in <form> tag are: 

application/x-www-form-urlencoded 
multipart/form-data 

El primero es el valor por defecto , el segundo que necesita solo cuando carga archivos.

@Alohci proporcionado explicación de por qué PHP no llena $_POST matriz, pero almacenar el valor dentro de una variable $HTTP_RAW_POST_DATA.

ejemplo de lo que puede ir mal con text/plain enctype:

file1.php:

<form method="post" enctype="text/plain" action="file2.php"> 
<textarea name="input1">abc 
input2=def</textarea> 
<input name="input2" value="ghi" /> 
<input type="submit"> 
</form> 

file2.php:

<?php 
print($HTTP_RAW_POST_DATA); 
?> 

Resultado:

input1=abc 
input2=def 
input2=ghi 

n manera de distinguir guish cuál es el valor de input1 y input2 variables. Puede ser

  • INPUT1 = abc\r\ninput2=def, INPUT2 = ghi, así como
  • INPUT1 = abc, INPUT2 = def\r\ninput2=ghi

No tal problema cuando se usan los otros dos codificaciones mencionados antes.

La diferencia entre GET y POST:

  • en GET, las variables son parte del URL y están presentes en la URL como cadena de consulta, por lo tanto, deben ser codificados en URL (y son, incluso si escribe enctype="text/plain" - el navegador lo ignora, puede probarlo usando Wireshark para olfatear los paquetes de solicitud),
  • al enviar la POST, las variables no son parte de la URL, pero se envían como el último encabezado en HTTP solicitud (POSTDATA), y puede elegir si desea enviarlos como text/plain o application/x-www-form-urlencoded, bu El segundo es la única solución no ambigua.
+3

Según [HTML5] (http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#attr-fs-enctype) 'text/plain' es un tercer contenido válido- escriba para enctype. El formato se describe en http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#plain-text-form-data. – Alohci

+0

una buena mesa es [aquí] (http://www.w3schools.com/tags/att_form_enctype.asp) (Ya lo publiqué) –

+5

Francamente, nunca creo una palabra que w3schools diga. – Alohci

10

HTML5 define cómo formatear los datos del formulario enviados como text/plain aquí: http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#plain-text-form-data.

En la parte inferior de esa sección, que dice:

cargas útiles utilizando el formato text/plain pretenden ser humano legible. No se pueden interpretar de forma confiable por computadora, ya que el formato es ambiguo (por ejemplo, no hay forma de distinguir una nueva línea literal en un valor de la nueva línea al final del valor).

Así que no es descabellado que PHP no intente interpretarlo y solo lo haga disponible en forma cruda. Para mí, ese parece el enfoque correcto.

Cuestiones relacionadas