2009-11-20 24 views
6

Come posso consentire agli utenti di utilizzare il "" (virgolette) all'interno di un campo di testo ...L'uso di virgolette doppie in un valore "input type =" text "" non funziona, le stringhe si fermano a virgolette doppie!

Ogni volta che uso la virgola doppia nel campo (il valore), quindi quando si riceve la variabile in il mio file PHP con:

$text=mysql_real_escape_string($_POST['subject']); 

e then echo, ottengo una stringa che è sfuggito correttamente, ma la stringa si ferma esattamente prima della doppia citazione

Non voglio che si fermi a causa della! doppia citazione però!

Javascript è usato per validare il campo di testo in modo che non sia vuoto, forse dovrei fare qualcosa di più con javascript durante la convalida e alterare il valore, così php può ottenere il valore corretto includendo le virgolette doppie?

Grazie

UPDATE

CODICE:

$headline= mysql_real_escape_string($_POST['headline']); 
    echo htmlentities($headline); 

Ho provato fondere le due sopra, solo dare gli stessi risultati. NOTA: Ho anche provato ad aggiungere ENT_QUOTES nella funzione htmlentities ...

stringa formattata come è entrato:

+ , . ; : - _ space & % ! ? = # * ½ @/\ [ ]< > " ' hej hej 

uscita volontà questo quando si echeggiare:

+ , . ; : - _ space & % ! ? = # * ½ @/\\ [ ]< > 
+0

Si prega di non utilizzare JavaScript per questo. Non farebbe comunque nulla che non dovresti fare sul lato server. –

risposta

20

Devi usare htmlspecialchars($str, ENT_QUOTES) o htmlentities($str, ENT_QUOTES) per convertire le virgolette nell'entità HTML &quot;. Queste funzioni si prendono anche cura degli altri personaggi che dovrebbero essere codificati.

mysql_real_escape_string() è pensato solo per l'escape di virgolette singole nelle query di database, in modo che sia possibile immettere correttamente stringhe con virgolette singole nel database (ed evitare iniezioni SQL).

MODIFICA: aggiunti parametri. Grazie a micahwittman

+0

Non visualizza una doppia quotazione, visualizza solo i backslash ... Leggi il mio aggiornamento plz –

+0

È necessario utilizzare il secondo parametro opzionale per htmlentities come questo: echo htmlentities ($ headline, ENT_QUOTES); che codificherà anche virgolette doppie e singole (vedi altre costanti speciali oltre a ENT_QUOTES su http://php.net/manual/en/function.htmlentities.php). Inoltre, non dovresti usare solo sql_real_escape_string() per prepararti a memorizzare la stringa in un database mysql - ecco perché \ sta diventando \\. – micahwittman

1

Non è compito del JS modificare la stringa di input, il server dovrebbe assicurarsi che possa accettare ciò che sta ottenendo a prescindere.

È possibile scappare dalle virgolette con un altro valore sia il simbolo Assci o HTML &quot; ecc. Prima di passare alla funzione di escape mysql?

3

La ragione per cui non funziona quando la si immette nel input è perché il value viene troncato alla quota. Avrai bisogno di usare htmlspecialchars() sull'output.

2

Stai mescolando due cose: mysql_real_escape_string viene utilizzato per preparare le stringhe per l'archiviazione in un database mysql. htmlentities viene utilizzato per preparare le stringhe per l'eco nel browser. Entrambi sono importanti da fare, ma non ci si può aspettare che chiamino uno dopo l'altro sulla stessa stringa.Fai qualcosa di simile al seguente:

// Copy string after escaping for mysql into $db_headline 
$db_headline= mysql_real_escape_string($_POST['headline']); 

// Copy string after escaping for page display into $html_headline 
$html_headline = htmlentities($_POST['headline']); 

// Store the headline in the database 

... 

?> 
<input type="text" name="headline" value="<?php echo $html_headline ?>" /> 

... 
Problemi correlati