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.
Perché ne hai bisogno? Sembra un problema per me. – Halcyon
se si tratta di virgolette singole, quindi utilizzare str_replace –
[This] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) potrebbe aiutare –