php - form - method="post" enctype="text/plain" no son compatibles?
input type email (2)
[Revisado]
La respuesta es, porque PHP no lo maneja (y 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 predeterminado, el segundo que necesita solo cuando carga archivos.
@Alohci proporcionó la explicación de por qué PHP no llena $_POST
array, pero almacena el valor dentro de una variable $HTTP_RAW_POST_DATA
.
Ejemplo de lo que puede salir mal con text/plain
enctype:
archivo1.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
No hay manera de distinguir cuál es el valor de las variables input1
y input2
. Puede ser
- input1 =
abc/r/ninput2=def
, input2 =ghi
, así como - input1 =
abc
, input2 =def/r/ninput2=ghi
No hay tal problema cuando se utilizan las otras dos codificaciones mencionadas anteriormente.
La diferencia entre GET y POST:
- en GET, las variables son parte de la URL y están presentes en la URL como cadena de consulta, por lo tanto, deben estar codificadas en la URL (y lo son, incluso si escribes
enctype="text/plain"
; simplemente es ignorado por el navegador; puedes probarlo usando Wireshark para olfatear los paquetes de solicitud), - al enviar POST, las variables no son parte de la URL, pero se envían como el último encabezado en la solicitud HTTP (POSTDATA), y puede elegir si desea enviarlas como
text/plain
oapplication/x-www-form-urlencoded
, pero el segundo es la única solución no ambigua.
Cuando uso
<form method="post" enctype="text/plain" action="proc.php">
los datos del formulario no se pueden enviar correctamente al archivo proc.php. ¿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?
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, dice:
Las cargas útiles que utilizan el formato texto / plano están destinadas a ser legibles por el ser humano. No son confiablemente interpretables 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).
Por lo tanto, no es descabellado que PHP no intente interpretarlo y solo lo haga disponible en forma cruda. Para mí, ese parece el enfoque correcto.