2012-02-15 6 views
6

Ho bisogno di memorizzare caratteri speciali e simboli nel database mysql. Quindi posso salvarlo come è 'ü' o convertirlo in codice html come '& uuml;'Devo utilizzare le entità HTML durante l'archiviazione dei dati nel database?

Non sono sicuro che sarebbe meglio.

Anche io sto avendo simboli come '♥', '"'.

Si prega di suggerire quale è meglio? Suggerire inoltre se esiste un metodo alternativo.

Grazie.

+0

Mi sono preso la libertà di cambiare il titolo un po '- il tuo titolo andava bene, ma in questo modo, è più facile trovare domande future simili. (Ho appena cercato e ho realizzato che non esiste un duplicato facile da trovare di questo.) –

+1

Dipende dal set di caratteri utilizzato dalla colonna in cui si memorizza l'HTML. Normalmente dovresti usare un set di caratteri che copra tutti i caratteri (quindi nessuno è "speciale") ei tuoi dati possono essere archiviati in un formato normalizzato e non contengono alcuna codifica speciale accanto alla codifica charset che ogni campo di testo in un database ha Comunque. – hakre

+0

@Pekka Va bene. Se è utile ad altro in questo modo, devo ringraziarti. –

risposta

5

Le entità HTML sono state introdotte anni fa per trasportare informazioni sui caratteri sul filo quando il trasporto non era binario e nel caso in cui l'utente-agente (browser) non supportasse la codifica charset del livello di trasporto o del server.

Come entità HTML contiene solo caratteri molto semplici (&, ;, a-z e 0-9) e tali caratteri hanno la stessa codifica binaria nella maggior parte dei caratteri, questo era ed è molto sicuro da tali effetti collaterali.

Tuttavia, quando si memorizza qualcosa nel database, non si verificano questi problemi perché di solito si ha il controllo e si sa come e come è possibile memorizzare il testo nel database.

Ad esempio, se si consente Unicode per il testo all'interno del database, è possibile memorizzare tutti i caratteri, nessuno è veramente speciale. Nota che devi conoscere il tuo database qui, ci sono alcuni dettagli tecnici che puoi incontrare. Come se non conoscessi la codifica del charset per la tua connessione al database, così non puoi dire esattamente al tuo database quale testo vuoi memorizzare lì. Ma generalmente, è sufficiente memorizzare il testo e recuperarlo in seguito. Niente di speciale da affrontare.

In realtà ci sono aspetti negativi quando si utilizza entità HTML al posto del personaggio pianura:

  • entità HTML consumano più spazio: ü è molto più grande ü in LATIN-1, UTF-8, UTF-16 o UTF-32.
  • Le entità HTML devono essere ulteriormente elaborate. Devono essere creati e, una volta letti, devono essere analizzati. Immagina di dover cercare un testo specifico nel tuo database, o qualsiasi altra azione necessiti di una gestione aggiuntiva. Questo è solo sopra la testa.

Il vero divertimento inizia quando si mescolano entrambi i concetti. Vieni in un posto in cui non vuoi entrare. Quindi non farlo perché non ne avrai bisogno.

+0

Questo ha 5 anni ma voglio testimoniare il "vero divertimento" menzionato nell'ultimo paragrafo. Abbiamo un database MySql che ha un sacco di tabelle che hanno campi con 'latin1' e campi con regole di confronto' utf-8'. Abbiamo memorizzato sia i caratteri speciali (in gran parte registrati che i marchi) e le entità html (e in alcuni casi le entità html con doppia codifica, ad esempio '& reg;') nel database. Ragazzi e ragazze, non andare su questa strada. Prendere decisioni intelligenti quando si tratta di memorizzare i caratteri nel database e attenersi ad essi. Quando estrai i dati, POI puoi modificarli come necessario. – DerProgrammer

5

Lascia i dati non elaborati nel database. Non utilizzare le entità HTML per questi finché non ne hai bisogno per HTML. Non sai mai quando potresti voler utilizzare i tuoi dati altrove, non su una pagina web.

+1

+1, ma 'htmlentities' non è nemmeno necessario durante l'output di HTML - un' htmlspecialchars() 'farà per evitare XSS. 'htmlentities' dovrebbe * mai * essere necessario in un ambiente correttamente configurato –

+1

@Pekka, non stavo suggerendo di usare la funzione, mi riferivo alle entità stesse. Sì, 'htmlspecialchars()' è il metodo preferito per l'effettiva emissione dei dati. – Brad

1

Il mio suggerimento rispecchierebbe gli altri contributori, non convertire le entità speciali quando li salvate nel vostro database.

Alcune ragioni contro la conversione:

  • K.I.S.S principle (la mia più grande motivo per non farlo)
  • maggior parte delle entità finirà per consumare più spazio quindi prima di essere convertito
  • sciogliete la capacità di cercare le entità ü in una parola, sarebbe [word]+ü+[/word] e sarà necessario eseguire un confronto tra le stringhe dell'equivalente html di ü =>[word]+ü+[/word].
  • la tua uscita può cambiare da HTML per dire un'API per mobile, ecc. Che rende la conversione molto superflua.
  • necessario convertire su input di dati e su output (di nuovo se l'output cambia da semplice HTML a qualcos'altro).
Problemi correlati