2010-01-05 33 views

Respuesta

72

uso htmlentities:??

<input value="<?php echo htmlentities($value);?>"> 
+3

¿Qué sucede si desea guardar estos valores no codificados en la base de datos? Tienes que aplicar cada vez 'html_entity_decode();' antes de hacer el SQL INSERT? Eso no suena bien – dynamic

+4

yes123, no, no lo haces. Esta codificación asegurará que los valores sean correctos en el documento HTML. El navegador web lo enviará automáticamente en el formato correcto y normal. –

+0

¡Tienes razón! Me he perdido ese – dynamic

10

supongo que su "cuadro de texto" es un elemento HTML <input>

Si es así, lo está mostrando usando algo como esto:

echo '<input name="..." value="' . $yourValue . '" />'; 

Si es el caso, tiene que escapar del HTML que está contenida en la variable, con htmlspecialchars:

echo '<input name="..." value="' . htmlspecialchars($yourValue) . '" />'; 

Tenga en cuenta que puede que tenga que añadir un par de parámetros, especialmente a especifica la codificación que estás usando.


De esta manera, teniendo en cuenta $yourValue se ha inicializado como esto:

$yourValue = '5 " inches'; 

que obtendrá de este genera HTML:

<input name="..." value="5 " inches" /> 

Para que uno, que funciona mucho mejor:

<input name="..." value="5 &quot; inches" /> 
+2

Entonces, ¿qué sucede cuando envía ese campo de entrada? ¿Entrará en una base de datos como " y luego tendrá que convertirlo a otro lugar? ¿Qué sucede si desea enviarlo con la comilla doble real en él? – mikato

+0

+1 por ser más descriptivo, mencionando la codificación y dado que 'htmlspecialchars()' es suficiente. – DanMan

0

Probar esto

echo '<input name="..." value="' . htmlspecialchars(stripslashes($yourValue)) . '" />'; 

o

<input name="..." value="<?php echo htmlspecialchars(stripslashes($value)); ?>"> 

Buena suerte;)

5

Cuando se utiliza juego de caracteres UTF-8, utilizo el código de abajo para conseguir Iñtërnâtiônàlizætiøn y dobles (o única) cita a derecha:

<input type="text" name="title" value="<?php echo htmlentities(stripslashes(utf8_decode($title))); ?>" /> 

ps: esto es útil después de que alguien envió el formulario, pero cuando la entrada no está validada.

+0

Prefiero usar 'stripcslashes()' para conservar las líneas de cambio. – Raptor

0

Esto es un poco viejo pero lo encontré, así que pensé en contribuir con lo que aprendí.

He encontrado si tiene comillas dobles en una variable en javascript (de AJAX/base de datos) y quiere ponerlo en un campo - si construye todo el campo/formulario html y luego lo cambia a un div usando innerHTML, las comillas dobles en el valor causarán problemas. Estaba haciendo esto y no pude encontrar una forma de escapar escapándome.

Debe construir el html con el campo y cambiarlo primero, luego hacer un document.getElementById ('myfieldid'). Value = thevalue; en su lugar y funciona bien.

+1

Para una solución de Javascript, esto funcionó y me sacó de aprietos. Nadie mencionó que este hilo debía estar en PHP. Así que te quité tu -1. :) Gracias por resolver esto. De lo contrario, me habría llevado toda la noche arreglar un error. – Paul

+0

Gracias :) Era un problema extraño y no podía creer que escapar no funcionara. Es bueno saber que ayudó, y que no soy el único que tuvo este dolor de un problema. – mikato

0

Personnaly Yo uso este truco:

$s = str_replace("& amp ;", "&", (htmlentities(stripslashes($s), ENT_QUOTES, 'UTF-8'))); 
0

que necesitaba para aplicar htmlspecialcars() para consultar matriz resultante.Encontré a useful solution from here (vea el comentario de sean).

//create a cleaning function 
function _clean(&$value) { 
    $value = htmlspecialchars($value); 
    //$value = htmlspecialchars($value, ENT_QUOTES);//alternative 
} 

//fetch the data from DB somehow (sqlQ is a custom function) 
$q = "..."; 
$r = $d->sqlQ($q); 
$row = mysqli_fetch_array($r,MYSQLI_ASSOC); 

//...call the function recursively (not always necessary) to the resultset row 
array_walk_recursive($row, '_clean'); 

Se hace un trabajo innecesario bastante poco si solamente sacan algunas columnas de texto, pero al menos no es necesario escribir la función htmlspecialchars() con el formato HTML varias veces.

6

Para UTF-8 Fui por htmlspecialchars($value, ENT_QUOTES, "UTF-8") que funcionó.

stack source

Cuestiones relacionadas