Browse Source

Encode based on response character encoding

Before this commit, characters were always encoded with the default
encoding (i.e. ISO-8859-1). Now, the character encoding of the response
is used.

Closes gh-files
pull/33073/head
Arjen Poutsma 2 years ago
parent
commit
e62255512a
  1. 6
      spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractFormTag.java
  2. 23
      spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/InputTagTests.java

6
spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractFormTag.java

@ -92,7 +92,8 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag { @@ -92,7 +92,8 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag {
* as required. This version is <strong>not</strong> {@link PropertyEditor}-aware.
*/
protected String getDisplayString(@Nullable Object value) {
return ValueFormatter.getDisplayString(value, isHtmlEscape());
String displayString = ValueFormatter.getDisplayString(value, false);
return isHtmlEscape() ? htmlEscape(displayString) : displayString;
}
/**
@ -102,7 +103,8 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag { @@ -102,7 +103,8 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag {
* to obtain the display value.
*/
protected String getDisplayString(@Nullable Object value, @Nullable PropertyEditor propertyEditor) {
return ValueFormatter.getDisplayString(value, propertyEditor, isHtmlEscape());
String displayString = ValueFormatter.getDisplayString(value, propertyEditor, false);
return isHtmlEscape() ? htmlEscape(displayString) : displayString;
}
/**

23
spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/InputTagTests.java

@ -96,8 +96,8 @@ class InputTagTests extends AbstractFormTagTests { @@ -96,8 +96,8 @@ class InputTagTests extends AbstractFormTagTests {
@Test
void simpleBindWithHtmlEscaping() throws Exception {
final String NAME = "Rob \"I Love Mangos\" Harrop";
final String HTML_ESCAPED_NAME = "Rob &quot;I Love Mangos&quot; Harrop";
final String NAME = "Rob \"I Love Cafés\" Harrop";
final String HTML_ESCAPED_NAME = "Rob &quot;I Love Caf&eacute;s&quot; Harrop";
this.tag.setPath("name");
this.rob.setName(NAME);
@ -112,6 +112,25 @@ class InputTagTests extends AbstractFormTagTests { @@ -112,6 +112,25 @@ class InputTagTests extends AbstractFormTagTests {
assertValueAttribute(output, HTML_ESCAPED_NAME);
}
@Test
void simpleBindWithHtmlEscapingAndCharacterEncoding() throws Exception {
final String NAME = "Rob \"I Love Cafés\" Harrop";
final String HTML_ESCAPED_NAME = "Rob &quot;I Love Cafés&quot; Harrop";
this.getPageContext().getResponse().setCharacterEncoding("UTF-8");
this.tag.setPath("name");
this.rob.setName(NAME);
assertThat(this.tag.doStartTag()).isEqualTo(Tag.SKIP_BODY);
String output = getOutput();
assertTagOpened(output);
assertTagClosed(output);
assertContainsAttribute(output, "type", getType());
assertValueAttribute(output, HTML_ESCAPED_NAME);
}
protected void assertValueAttribute(String output, String expectedValue) {
assertContainsAttribute(output, "value", expectedValue);
}

Loading…
Cancel
Save