Как вы кодируете одинарные и двойные кавычки в Java? - PullRequest
2 голосов
/ 20 сентября 2011

Я использую AntiSamy для очистки пользовательского ввода, и он работает хорошо. Есть одна проблема: он кодирует одинарные и двойные кавычки. Поэтому, если я хочу что-то отредактировать, вместо my sample's отображается my sample's - одиночная кавычка становится закодированной.

К уточнить : Браузер корректно отображает кавычки, но они сохраняются в моей БД в виде HTML-сущностей. Поэтому, когда пользователь загружает сообщение для редактирования, сущности HTML отображаются в текстовом поле.

  1. Есть ли способ обойти это ограничение?
  2. Должен ли я использовать / есть ли другой инструмент?

Мои пользователи могут публиковать код и множество других вещей. Таким образом, AntiSamy делает отличную работу там. Но я не хочу преобразовывать одинарные и двойные кавычки в обычный текст.

Какие у меня есть варианты?

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011
String s = "string unencode ' "NOW"";
String unencoded = s.replaceAll("'", "'").replaceAll(""","\"");
myTextField.setText(unencoded);
1 голос
/ 20 сентября 2011

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

Если процесс кодирования более сложный (т.е.применяются некоторые белые списки тегов или правила форматирования), вы можете хранить две версии ввода - зашифрованную версию HTML для отображения и необработанную версию для редактирования, а также обновлять версию HTML при изменении исходной версии.

1 голос
/ 20 сентября 2011

Если у AntiSamy нет метода реверсирования, эта вещь, в частности, может быть обработана StringEscapeUtils.unesacpeHtml(..) из commons-lang.

Браузеры знают, как показать ', поэтому не должно бытьпроблема.Используйте вышеперечисленное, только если вы собираетесь отображать текст в текстовой области или другом элементе управления вводом или вне браузера.

...