2012-02-15 24 views
6

Necesito almacenar caracteres especiales y símbolos en la base de datos mysql. Entonces, o puedo almacenarlo, ya que es como 'ü' o convertirlo a código html como '& uuml;'¿Necesito usar entidades HTML al almacenar datos en la base de datos?

No estoy seguro de cuál sería mejor.

También tengo símbolos como '♥', '"'.

Por favor sugiérame cuál es mejor? También sugiera si hay algún método alternativo.

Gracias.

+0

Me tomé la libertad de cambiar un poco el título - su título estaba bien, pero de esta manera, es más fácil de encontrar para futuras preguntas similares. (Acabo de buscar y me di cuenta de que no hay un duplicado fácil de encontrar de este). –

+1

Eso depende del juego de caracteres que esté usando la columna donde almacena el código HTML. Normalmente, debe usar un conjunto de caracteres que cubra todos los caracteres (para que ninguno sea "especial") y sus datos pueden almacenarse en forma normalizada y no contienen ninguna codificación especial junto a la codificación de conjunto de caracteres desnudo que tiene cada campo de texto en una base de datos. de todas formas. – hakre

+0

@Pekka Eso está bien. Si es útil para otros de esta manera, debo agradecerte. –

Respuesta

5

Las entidades HTML se introdujeron hace años para transportar información de caracteres por cable cuando el transporte no era binario seguro y para el caso de que el usuario (navegador) no admitiera la codificación del chaset de la capa de transporte o el servidor.

Como entidad HTML contiene sólo caracteres muy básicas (&, ;, a-z y 0-9) y los personajes tienen la misma codificación binaria en la mayoría de los juegos de caracteres, esto es y era muy seguro de los efectos secundarios.

Sin embargo, cuando almacena algo en la base de datos, no tiene estos problemas porque normalmente tiene el control y sabe qué y cómo puede almacenar texto en la base de datos.

Por ejemplo, si permite que Unicode ingrese texto dentro de la base de datos, puede almacenar todos los caracteres, ninguno es realmente especial. Tenga en cuenta que necesita conocer su base de datos aquí, hay algunos detalles técnicos que puede encontrar. Como si no conociera la codificación del conjunto de caracteres para la conexión de su base de datos, por lo que no puede decirle exactamente a la base de datos qué texto desea almacenar allí. Pero, en general, solo almacena el texto y lo recupera más tarde. Nada especial para tratar.

De hecho hay desventajas cuando se utiliza entidades HTML en lugar del carácter llano:

  • entidades HTML consumen más espacio: ü es mucho más grande que ü en Latin-1, UTF-8, UTF-16 o UTF-32.
  • Las entidades HTML necesitan más procesamiento. Deben crearse y, cuando se lean, deben analizarse. Imagine que necesita buscar un texto específico en su base de datos, o cualquier otra acción necesitaría un manejo adicional. Eso es solo por encima.

La verdadera diversión comienza cuando se mezclan ambos conceptos. Llegas a un lugar en el que realmente no quieres entrar. Entonces no lo hagas porque no vas a necesitarlo.

+0

Esto tiene 5 años pero quiero dar testimonio de la "verdadera diversión" mencionada en el último párrafo. Tenemos una base de datos MySql que tiene muchas tablas que tienen campos con 'latin1' Y campos con colaciones' utf-8'. Hemos almacenado tanto caracteres especiales (en su mayoría registrados y de marca registrada) como entidades html (y en algunos casos entidades html de doble codificación, es decir, '& reg;') en la base de datos. Niños y niñas, no sigan este camino. Tome decisiones inteligentes cuando se trata de cómo almacenar caracteres en su base de datos y atenerse a ella. Cuando saca los datos, ENTONCES puede modificarlos como lo necesite. – DerProgrammer

5

Deje sus datos sin procesar en la base de datos. No use entidades HTML para esto hasta que los necesite para HTML. Nunca se sabe cuándo es posible que desee utilizar sus datos en otro lugar, no en una página web.

+1

+1, pero 'htmlentities' ni siquiera es necesario cuando se envía HTML; un' htmlspecialchars() 'hará para evitar XSS. 'htmlentities' nunca debería ser * * necesario en un entorno configurado correctamente –

+1

@Pekka, no estaba sugiriendo usar la función, me refería a las entidades mismas. Sí, 'htmlspecialchars()' es el método preferido para realmente generar los datos. – Brad

1

Mi sugerencia reflejaría los otros contribuyentes, no convierta las entidades especiales al guardarlas en su base de datos.

Algunas razones en contra de la conversión:

  • K.I.S.S principle (mi mayor razón para no hacerlo)
  • mayoría de las entidades va a terminar consumiendo más espacio a continuación, antes de ser convertidos
  • desata la capacidad de buscar las entidades ü en una palabra, sería [word]+ü+[/word], y usted tendría que hacer una comparación de cadenas del equivalente html de ü =>[word]+ü+[/word].
  • su salida puede cambiar de HTML para decir una API para dispositivos móviles, etc. lo que hace que la conversión sea innecesaria.
  • necesita convertir en la entrada de datos, y en la salida (de nuevo si su salida cambia de HTML simple a otra cosa).
Cuestiones relacionadas