Делегат.replace () не работает над Grails List Array 2.3.8 - PullRequest
0 голосов
/ 29 июня 2018

Вот мой код для замены тегов HTML:

  def str
  String.metaClass.removeHtml {
      def removeThisHtml = [
         [htmlCode: "`",  value: "`"], 
         [htmlCode: "@",  value: "@"], 
         [htmlCode: "&",  value: "&"],
         [htmlCode: "\",  value: "\\"],
         [htmlCode: """, value: '"'], 
         [htmlCode: "'",  value: "'"], 
         [htmlCode: "&lt;",   value: "<"],
         [htmlCode: "&gt;",   value: ">"]
      ]

      removeThisHtml.each { element ->
         str = delegate.replace(element.htmlCode, element.value)
      } 
      return str
  }

А вот код формы моего контроллера:

def getProjectLists() {
  def currentUser = springSecurityService.currentUser
  def kups = ([['name':'<b>Sample 1</b>'.removeHtml()],['name':'<b>Sample 2</b>']])
  render kups as JSON  
}

Мой ожидаемый результат:

Образец1 Образец2

Но вывод:

Образец1 Образец2

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, что вы действительно хотите избежать HTML - отображать HTML-теги и сущности, поэтому имя функции removeHtml немного вводит в заблуждение, escapeHtml подойдет лучше.

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

Например, Apache Commons имеет метод StringEscapeUtils.escapeHtml.

String.metaClass.removeHtml { 
    return org.apache.commons.lang.StringEscapeUtils.escapeHtml(delegate) 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...