这里需要显式解码吗?

Is Explicit decoding required here?

假设我在 HTML 中显示转义值,文本区域下的代码如下:

     <c:out value="${person.name}" />

我的问题是我需要在服务器端手动解码这个值还是浏览器会自动解码?

不,你不需要手动解码这个值..你只需要:

  1. 将您的 HTTP 响应内容类型编码指定为 UTF-8。准确地说,使用 HttpServletResponse.setContentType ("text/html;charset=utf-8");.
  2. 你的 JSP 应该在你的 JSP 中将内容类型编码设置为 UTF-8 .. 准确地说,在你的 JSP 中添加这个元标记,你应该很好去 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

如果您的 JSP 中有此标记,那么浏览器将理解此页面的内容应按照 UTF-8 编码规则呈现。

如果不使用此类元标记或某些其他机制明确指定页面编码,则浏览器会在页面呈现时使用与其关联的默认编码,您可能看不到预期结果,尤其是对于来自 Unicode 高级 BMP 块的字符和补充多语言平面。 Check this on how to see the default encoding of browser


概念

服务器应在 "response stream" 中指定所需的编码方案,并且应在 JSP/ASP/HTML 页面中使用相同的编码方案。

服务器端编码选项

PHP header('Content-type: text/html; charset=utf-8');

Perl print "Content-Type: text/html; charset=utf-8\n\n";

Python 使用与 Perl 相同的解决方案(除了最后不需要分号)。

Java 小服务程序 resource.setContentType ("text/html;charset=utf-8");

JSP <%@ page contentType="text/html; charset=UTF-8" %>

ASP 和 ASP.Net <%Response.charset="utf-8"%>


客户端编码选项

在您的 HTML 页面中使用以下元标记 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>


延伸阅读:

当我得到转义输入的 request.parameter(通过)<c:out value="${person.name}" />,我得到转义值并将其按原样存储在数据库中。例如:- <script>test</script> is stored as &lt;script&gt;test&lt;/script&gt; 现在,当从数据库中获取值并显示在浏览器上时,它会正确呈现它,即 &lt;script&gt;test&lt;/script&gt; is displayed as <script>test</script>