2010-01-21 15 views
42

Al hacer este trabajo en PHP, uno puede cumplir con este tipo de problema:¿Cuál es la mejor práctica para establecer el atributo html a través de PHP?

<span title="<?php echo $variable;?>">... 

El problema es que si $variable contiene comillas dobles, debe cambiarlo a \"

Y que aún no es toda la historia :

<span title='<?php echo $variable;?>'>... 

En este caso, tenemos que cambiar comillas simples para \', pero deje comillas dobles como es.

Entonces, ¿cómo podemos hacerlo de manera general?

Respuesta

63

Uno siempre quiere la codificación HTML a las cosas dentro atributos HTML, que se puede ver con htmlspecialchars:

<span title="<?php echo htmlspecialchars($variable); ?>"> 

es probable que desee establecer el segundo parámetro ($quote_style) a ENT_QUOTES.

El único riesgo potencial es que $variable ya puede estar codificado, por lo que puede que desee establecer el último parámetro ($double_encode) a false.

+2

confirmó con las especificaciones de HTML5 aquí: http://stackoverflow.com/questions/5320177/what-values-can-i-put-in-an-html-attribute-value –

+0

1 de mencionando "ENT_QUOTES". Ya estaba usando la función this pero las comillas dobles estropeaban el html. – danielson317

3

Bueno, antes de enviar cualquier texto a HTML, debe escapar usando htmlspecialchars(). Así que solo asegúrese de que la comilla (doble) se haya cambiado correctamente.

Preste atención al segundo parámetro de esa función.

0

Para hacer frente a su edición [Editar : que ha retirado su parte]: Cuando se coloca dinámicamente JavaScript en su sitio, usted debe antes de conocer bastante bien, lo que se vería así. Si abre la puerta ampliamente para ataques XSS. Eso no significa que tenga que saber cada comilla, pero debe saber lo suficiente como para decidir cómo incrustarla en la línea donde finalmente la muestra en el archivo HTML.

Más allá de eso,

<a onclick="func(&apos;l&apos;)"> 

funciona exactamente igual que

<a onclick="func('l')"> 
Cuestiones relacionadas