Oto kombinacja stałych, których szukasz.
$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
to ujdzie & ' < >
, ale pozostawia "
sam. ENT_QUOTES & ~ENT_COMPAT
to język manipulacji bitami oznaczający "oba cytaty, pomijając podwójne cudzysłowy".
Działa to ze względu na sposób definiowania tych stałych. 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
Dlaczego byś kiedykolwiek chcą uciec apostrofów, ale nie cudzysłowy? Cóż, odwrotna przyczyna, dla której chcesz uniknąć podwójnych cudzysłowów, ale nie pojedynczych cudzysłowów: ponieważ masz ciąg z wieloma cudzysłowami "
i tylko kilkoma pojedynczymi cytatami '
, więc chcesz umieścić go w '
-delimited ciąg.
Przykład:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
json_encode()
tworzy wiele cudzysłów, więc ma to sens, aby trzymać wynik w apostrofu ograniczonej atrybutu i pozostawić podwójne cytaty Niecytowany.
Dlaczego tego potrzebujesz? Wydaje mi się, że jest to dla mnie problem. – Halcyon
jeśli to tylko pojedyncze cytaty, a następnie użyj str_replace –
[This] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) może pomóc –