2012-05-14 17 views
6

So che ci sono altri modi per evitare le virgolette singole (such as this answer), ma mi sembra che ci dovrebbe essere un modo usando htmlspecialchars().Esci solo dalle virgolette singole (lascia le doppie virgolette da solo) con htmlspecialchars()

Secondo il manuale, dovrebbe essere una combinazione delle loro costanti, ma in base alle loro spiegazioni, non lo vedo.

È possibile evitare solo le virgolette singole, lasciando le doppie virgolette da sole, con htmlspecialchars()?

+4

Perché ne hai bisogno? Sembra un problema per me. – Halcyon

+1

se si tratta di virgolette singole, quindi utilizzare str_replace –

+0

[This] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) potrebbe aiutare –

risposta

9
str_replace("'", "\\'", $string); 

lì.

In alternativa, utilizzare ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES); 
+1

Dubito seriamente che "\" sia la stringa di sostituzione prevista, se l'obiettivo è di inserirlo in un documento HTML. – hvd

+0

Se sta cercando di evitare le virgolette singole, quella sarebbe la stringa desiderata. – Norse

+1

Scambiare le virgolette singole per metterle in un attributo '' '-delimitato significa cambiarle in' ' '(o equivalente, se esiste un equivalente - Non sono sicuro).Il tuo altro suggerimento, "ENT_QUOTES', converte anche i caratteri di doppia citazione, che la domanda chiede di lasciare da soli. – hvd

1

utilizzare htmlspecialchars (...)

Poi str_replace (...) su un doppio apice

9

Ecco la combinazione di costanti che stai cercando.

$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding); 

Ciò sfuggire & ' < >, ma lascia " solo. ENT_QUOTES & ~ENT_COMPAT è un linguaggio di manipolazione bit che significa "entrambe le virgolette, meno le virgolette doppie".

Questo funziona a causa di come sono definite queste costanti. php-src/ext/standard/html.h

#define ENT_HTML_QUOTE_NONE   0 
#define ENT_HTML_QUOTE_SINGLE  1 
#define ENT_HTML_QUOTE_DOUBLE  2 

#define ENT_COMPAT  ENT_HTML_QUOTE_DOUBLE 
#define ENT_QUOTES  (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE) 
#define ENT_NOQUOTES ENT_HTML_QUOTE_NONE 

Perché mai vuole sfuggire virgolette singole, ma non le virgolette? Beh, l'inverso del motivo per cui eviterai le doppie virgolette, ma non le virgolette singole: perché hai una stringa con un sacco di virgolette doppie " e solo alcune virgolette singole ', quindi ti piacerebbe incollarla in un '-stringa limitata.

Un esempio:

<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>' 

json_encode() crea un sacco di doppie virgolette, quindi ha senso attaccare il risultato in un attributo single-citazione delimitato, e lasciare le virgolette senza caratteri di escape.

+0

So che questa è una domanda vecchia e chiusa, ma non sono riuscito a trovare una risposta alla domanda originale da nessuna parte, quindi ho deciso di pubblicarne una. – Grilse

+0

Questa dovrebbe essere la risposta. Preferisco 'ENT_HTML5 | ENT_QUOTES & ~ ENT_COMPAT' stesso. – Isius

Problemi correlati