Mysql
 sql >> Database >  >> RDS >> Mysql

Inserisci testo e caratteri speciali e MySQL

Hai la giusta idea di mantenere il testo nel database grezzo. Non sono sicuro a cosa servano tutte le cose dell'entità HTML; non dovrebbe essere necessario farlo per un inserimento nel database.

[L'unico motivo per cui mi viene in mente il motivo per cui potresti provare a decodificare l'input in entrata per il database sarebbe se scopri che stai ricevendo riferimenti a caratteri come Š nell'input di invio del modulo. Se ciò accade, è perché l'utente sta inserendo caratteri che non esistono nella codifica utilizzata dalla pagina con il modulo. Questa forma di codifica è totalmente falsa perché non puoi distinguere tra l'utente che digita Š e digitando letteralmente Š ! Dovresti evitarlo utilizzando la codifica UTF-8 per tutte le tue pagine e contenuti, poiché ogni possibile carattere rientra in questa codifica.]

Le stringhe nel tuo script dovrebbero sempre essere testo grezzo senza caratteri di escape. Ciò significa che non gli fai nulla fino al momento in cui li visualizzi in un contesto che non è in chiaro. Quindi per inserirli in una stringa SQL:

$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(oppure usa query parametrizzate per evitare di dover eseguire manualmente l'escape.) Quando inserisci contenuto in HTML:

<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(puoi definire una funzione di supporto con un nome più breve come function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } se vuoi ridurre la quantità di digitazione che devi fare nei modelli.)

E... è più o meno così. Non è necessario elaborare le stringhe che escono dal database, poiché sono già stringhe non elaborate. Non è necessario elaborare le stringhe di input (*), a parte qualsiasi convalida del campo specifica dell'applicazione che si desidera eseguire.

*:bene, tranne se magic_quotes_gpc è attivato, nel qual caso è necessario stripslashes() tutto ciò che arriva da get/post/cookie o, la mia opzione preferita, fallisce immediatamente:

if (get_magic_quotes_gpc())
    die(
        'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
        'Turn them off, you idiot, or I refuse to run. So there!'
    );