2012-05-14 2 views
6

Я знаю, что есть другие способы избежать одиночных кавычек (such as this answer), но мне кажется, что должен быть способ, используя htmlspecialchars().Побег только одинарных кавычек (оставляйте только двойные кавычки) с htmlspecialchars()

Согласно руководству, это должно быть некоторая комбинация их констант, но на основе их объяснений я не вижу этого.

Можно ли избежать одиночных кавычек, оставив только двойные кавычки, с htmlspecialchars()?

+4

Зачем вам это нужно? Мне кажется, что это проблема. – Halcyon

+1

Если это только одинарные кавычки, то используйте str_replace –

+0

[Это] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) может помочь –

ответ

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

Там.

Или используйте ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES); 
+1

Я серьезно сомневаюсь, что '\ '' является обязательной заменой строки, если цель состоит в том, чтобы поместить ее в HTML-документ. – hvd

+0

Если он пытается избежать одиночных кавычек, это будет предполагаемая строка. – Norse

+1

Исключение одиночных кавычек, чтобы поместить его в атрибут '' '-delimited, означает их изменение на' ' '(или эквивалент, если есть эквивалент - я не уверен).Ваше другое предложение, ENT_QUOTES', также преобразует символы двойной кавычки, которые задает вопрос в одиночку. – hvd

1

Использование htmlspecialchars (...)

Тогда str_replace (...) на кавычками

9

Вот комбинация констант, которые вы ищете.

$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() создает много двойных кавычек, так что имеет смысл придерживаться результат в одинарные кавычки разделителями атрибута, и оставить двойные кавычки незаменяемые.

+0

Я знаю, что это старый и закрытый вопрос, но я не мог найти ответ на исходный вопрос в любом месте, поэтому решил его опубликовать. – Grilse

+0

Это должен быть ответ. Я предпочитаю 'ENT_HTML5 | ENT_QUOTES & ~ ENT_COMPAT'. – Isius

Смежные вопросы