type form fields action_page php html forms post

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 o application/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.