Вот комбинация констант, которые вы ищете.
$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
Это избежит & ' < >
, но оставляет "
в покое. ENT_QUOTES & ~ENT_COMPAT
- язык бит-манипуляции, означающий «обе цитаты, минус двойные кавычки».
Это работает из-за того, как определяются эти константы. 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
Почему вы никогда не хотите, чтобы избежать одиночные кавычки, но не двойные кавычки? Ну, обратная причина, по которой вы избежите двойных кавычек, но не одинарные кавычки: потому что у вас есть строка с большим количеством "
двойных кавычек и всего лишь несколько кавычек '
, поэтому вы хотели бы вставить ее в '
-пределенная строка.
Пример:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
json_encode()
создает много двойных кавычек, так что имеет смысл придерживаться результат в одинарные кавычки разделителями атрибута, и оставить двойные кавычки незаменяемые.
Зачем вам это нужно? Мне кажется, что это проблема. – Halcyon
Если это только одинарные кавычки, то используйте str_replace –
[Это] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) может помочь –