Aquí está la combinación de constantes que usted está buscando.
$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
Este escaparán & ' < >
, pero deja "
solo. ENT_QUOTES & ~ENT_COMPAT
es un lenguaje de manipulación de bits que significa "ambas comillas, menos las comillas dobles".
Esto funciona debido a cómo se definen estas constantes. 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
Por qué querrías escapar comillas simples, pero no comillas dobles? Bueno, lo contrario de la razón por la que escaparía de las comillas dobles, pero no de las comillas simples: porque tiene una cadena con muchas comillas dobles "
y solo unas pocas comillas simples de '
, por lo que le gustaría incluirla en una '
-cadena reducida.
Un ejemplo:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
json_encode()
crea un montón de comillas dobles, por lo que tiene sentido para pegar el resultado en un atributo de comilla simple delimitado, y dejar las comillas dobles sin escape.
¿Por qué necesita esto? Me parece un problema. – Halcyon
si solo son comillas simples, entonces use str_replace –
[Esto] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) podría ayudar –