para - title html css
Formularios con acción="" (4)
Me acabo de enterar (por las malas) de que cuando tienes un formulario HTML con action=""
, los navegadores Webkit lo tratan de manera diferente a Firefox e Internet Explorer.
En FF e IE, estas dos etiquetas de formulario son equivalentes:
<form method="post" action="">
<form method="post">
Ambos enviarán el formulario a la misma página. Sin embargo, Safari y Chrome enviarán ese primer formulario a la página predeterminada (index.php, o lo que sea) - el segundo formulario funciona igual que FF / IE.
Rápidamente he pirateado mi código para que en cualquier lugar donde normalmente se imprima una acción vacía, no agregue un atributo de acción en absoluto.
Esto parece muy complicado y no es la mejor manera de estar haciendo las cosas. ¿Alguien puede sugerir un método mejor? Además, ¿alguien puede informarme sobre por qué Webkit haría tal cosa?
El atributo de action
es obligatorio pero puede especificar una referencia de URI vacía que se refiera al URI actual:
<form method="POST" action="">
Editar Ok, esto en realidad es un error archivado de WebKit 528+ (ver Bug 19884 ) cuando se usa un URI vacío con un URI base específico usando el elemento BASE
. En ese caso, WebKit toma el URI base en lugar de resolver el URI vacío desde el URI base.
Pero este es el comportamiento correcto de acuerdo con RFC 3986 :
5.1. Establecer un URI base
El término "relativo" implica que existe un "URI base" contra el cual se aplica la referencia relativa. [...]
El URI base de una referencia puede establecerse de una de cuatro maneras, que se analizan a continuación por orden de precedencia. Se puede pensar en el orden de precedencia en términos de capas, donde la URI base más internamente definida tiene la precedencia más alta. Esto se puede visualizar gráficamente de la siguiente manera:
.----------------------------------------------------------. | .----------------------------------------------------. | | | .----------------------------------------------. | | | | | .----------------------------------------. | | | | | | | .----------------------------------. | | | | | | | | | <relative-reference> | | | | | | | | | `----------------------------------'' | | | | | | | | (5.1.1) Base URI embedded in content | | | | | | | `----------------------------------------'' | | | | | | (5.1.2) Base URI of the encapsulating entity | | | | | | (message, representation, or none) | | | | | `----------------------------------------------'' | | | | (5.1.3) URI used to retrieve the entity | | | `----------------------------------------------------'' | | (5.1.4) Default Base URI (application-dependent) | `----------------------------------------------------------''
En este caso, el elemento BASE
con atributo href
es un URI base incrustado en el contenido . Y el URI base incrustado en el contenido tiene una precedencia más alta que el URI utilizado para recuperar la entidad . Así que el comportamiento de WebKit es en realidad el comportamiento esperado de acuerdo con RFC 3986.
Pero en HTML 5 este comportamiento de un URI vacío en la action
(aún un borrador) difiere del RFC 3986:
Si acción es la cadena vacía, la acción será la dirección del documento .
Nota: Este paso es una violación deliberada de RFC 3986, que requeriría el procesamiento de URL base aquí. Esta infracción está motivada por un deseo de compatibilidad con el contenido heredado. [RFC3986]
Francamente, un comentario HTML después de esta nota en el código fuente dice:
<!-- Don''t ask me why. But that''s what IE does. It even treats action="" differently from action=" " or action="#" (the latter two resolve to the base URL, the first one resolves to the doc URL). And other browsers concur. It is even required, see e.g. http://bugs.webkit.org/show_bug.cgi?id=7763 https://bugzilla.mozilla.org/show_bug.cgi?id=297761 -->
Así que esto es más bien un error originado en Internet Explorer que se convirtió en un estándar de facto.
La mejor manera en mi opinión sería no omitir el atributo de acción (que no validaría) sino especificar la acción real para el formulario. ¿Hay alguna razón por la que no especifiques la acción?
Siempre he usado (en PHP)
<form method="post" action="<?php echo htmlspecialchars($_SERVER[''REQUEST_URI'']); ?>">
Para que mis formularios se envíen a sí mismos.
Usualmente uso
<form method=''POST'' action=''?''>
Esto significa la URL actual pero sin parámetros.