2009-11-20 82 views
6

¿Cómo puedo hacer posible que los usuarios usen el '"' (comillas dobles) dentro de un campo de texto ...El uso de comillas dobles en un valor 'input type =' text '' no funciona, ¡la cadena se detiene en comillas dobles!

Siempre que utilizo comillas dobles en el campo (el valor) cuando recibo la variable en mi archivo PHP con:

$text=mysql_real_escape_string($_POST['subject']); 

y luego echo, me sale una cadena que se escapó correctamente, pero la cadena se detiene exactamente antes de la comilla doble

no quiero que se detenga debido a la! ¡Cita doble!

Javascript se utiliza para validar el campo de texto, por lo que no está vacío, tal vez debería hacer algo más con javascript al validar y modificar el valor, para que php pueda obtener el valor correcto, incluidas las comillas dobles.

Gracias

ACTUALIZACIÓN

CÓDIGO:

$headline= mysql_real_escape_string($_POST['headline']); 
    echo htmlentities($headline); 

He tratado de fusión de los dos anteriores, sólo dará los mismos resultados. NOTA: He tratado además de darle ENT_QUOTES en la función htmlentities ...

cadena sin formato como entró:

+ , . ; : - _ space & % ! ? = # * ½ @/\ [ ]< > " ' hej hej 

dará salida a esto cuando haciéndose eco de ella:

+ , . ; : - _ space & % ! ? = # * ½ @/\\ [ ]< > 
+0

No utilice JavaScript para esto. No haría nada que no deberías hacer en el lado del servidor de todos modos. –

Respuesta

20

Usted tiene que usar htmlspecialchars($str, ENT_QUOTES) o htmlentities($str, ENT_QUOTES) para convertir las comillas a la entidad HTML &quot;. Esas funciones también se ocupan de otros caracteres que deberían codificarse.

mysql_real_escape_string() solo está destinado a escapar de comillas simples en las consultas de la base de datos, para que pueda introducir cadenas con comillas simples en su base de datos (y evitar las inyecciones de SQL).

EDITAR: Parámetros agregados. Gracias a micahwittman

+0

No mostrará una comilla doble, solo muestra barras diagonales inversas ... Lea mi actualización por favor –

+0

Debe usar el segundo parámetro opcional para htmlentities como este: echo htmlentities ($ headline, ENT_QUOTES); que también codificará comillas dobles e individuales (ver otras constantes especiales además de ENT_QUOTES en http://php.net/manual/en/function.htmlentities.php). Además, no solo debería usar sql_real_escape_string() para prepararse para almacenar la cadena en una base de datos mysql; por eso \ se está convirtiendo en \\. – micahwittman

1

No es tarea de JS modificar la cadena de entrada, el servidor debe asegurarse de que puede aceptar lo que obtiene independientemente.

Puede escapar de las comillas dobles con otro valor ya sea símbolo Assci o HTML &quot; etc. antes de pasarlo a su función de escape mysql?

3

El motivo por el que no está funcionando cuando lo está enviando al input es porque el value se está truncando en la cita. Tendrá que usar htmlspecialchars() en la salida.

2

Está mezclando dos cosas: mysql_real_escape_string se usa para preparar cadenas para almacenar en una base de datos mysql. htmlentities se utiliza para preparar cadenas para hacer eco en el navegador. Ambos son importantes, pero no se puede esperar que funcionen uno tras otro en la misma cadena.Haga algo como lo siguiente:

// Copy string after escaping for mysql into $db_headline 
$db_headline= mysql_real_escape_string($_POST['headline']); 

// Copy string after escaping for page display into $html_headline 
$html_headline = htmlentities($_POST['headline']); 

// Store the headline in the database 

... 

?> 
<input type="text" name="headline" value="<?php echo $html_headline ?>" /> 

... 
Cuestiones relacionadas