2011-06-06 12 views
54

Dados los siguientes fragmentos de dos html/php:¿Cómo escapar correctamente los valores predeterminados de entrada de la forma html en php?

<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />

y

<textarea name="content"><?php echo $_POST['content']; ?></textarea>

lo que la codificación de caracteres necesito para utilizar para las variables de $_POST eco? ¿Puedo usar cualquier función PHP incorporada? Por favor, suponga que los valores $_POST aún no han sido codificados. Ninguna magia cita nada.

Respuesta

85

Utilice htmlspecialchars($_POST['firstname']) y htmlspecialchars($_POST['content']).

Siempre escapa de las cadenas con htmlspecialchars() antes de mostrarlas al usuario.

+13

Nota: Es importante utilizar el doble comillas para el atributo de valor en las etiquetas ''. –

+9

A menos que especifique 'ENT_QUOTES' como el segundo argumento' htmlspecialchars() ', las comillas simples no se escaparán. Por lo tanto, cualquier comilla simple presente en su valor '$ _POST' saldrá del campo' '. –

+5

Nota: No se sienta tentado a usar htmlentities(). Eso rompe los caracteres UTF-8. Como dijo rid, usa htmlspecialchars(). – Brainware

3

htmlspecialchars funcionaría en ambos casos. Eche un vistazo a las diferentes opciones de indicador para evitar que las comillas sean un problema en el caso input.

7

Sin embargo, htmlspecialchars() no le ayudará con value='single quotes'

Esto es lo que sucede:

value='We're not using this in our &quot;code&quot;...'

Todo lo que ves es We

+5

, por lo tanto, no utilice comillas simples en los valores. o use el modificador ENT_QUOTES. no es un gran problema –

+11

@YourCommonSense Presumiblemente los datos de la publicación provienen del usuario, por lo que "no utilizar comillas simples en los valores" no es un consejo terriblemente útil. Usar 'ENT_QUOTES' es la solución correcta, pero recordarlo podría ser un" gran problema ". –

+0

si no usa el parámetro 'ENT_QUOTES', entonces las comillas simples no se escapan. Esto no es un problema si en la etiqueta de entrada define el parámetro de valor como 'value =" comillas dobles "'. Las comillas dobles se escapan en la cadena proporcionada por el usuario y la parte con 'value =" ... 'es proporcionada por el servidor. – GoTo

Cuestiones relacionadas