【发布时间】:2015-11-19 14:03:48
【问题描述】:
假设我在 HTML 中显示转义值,并在文本区域下使用以下代码:
<c:out value="${person.name}" />
我的问题是我需要在服务器端手动解码这个值还是浏览器会自动解码?
【问题讨论】:
标签: java html security browser decoding
假设我在 HTML 中显示转义值,并在文本区域下使用以下代码:
<c:out value="${person.name}" />
我的问题是我需要在服务器端手动解码这个值还是浏览器会自动解码?
【问题讨论】:
标签: java html security browser decoding
不,你不需要手动解码这个值。你只需要:
HttpServletResponse.setContentType ("text/html;charset=utf-8");。<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。
服务器应在“响应流”中指定所需的编码方案,并且在 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 Servlet
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"/>
进一步阅读:
【讨论】:
c:out 是在浏览器中显示来自服务器的内容.. 这并不意味着将某些内容推送到服务器.. 所以,你所说的首先是不可能的.. 在无论如何,如果您想处理 HTTP 请求对象上的编码,请使用request.setCharacterEncoding("UTF-8"); ..阅读我在“进一步阅读”中提供的答案链接,以深入了解服务器和客户端编码细节..跨度>
c:out is to display something in browser which is coming from server .. ,但我要问的是,一旦某些输出在浏览器上显示为 c:out,现在表单将提交回服务器。现在我必须再次解码 servlet 中的代码吗?
h&amp;Agrawal 上使用 c:out,它会在浏览器上呈现为 h&amp;Agrawal,尽管它只会在 html 中显示为 HAgrawal。我的问题是将 html 表单提交回服务器,在我的 servlet 中是否需要显式解码才能将 h&amp;Agrwal 转换为 hAgrawal ?
当我获得转义输入的 request.parameter(通过)<c:out value="${person.name}" /> 时,我得到转义值并将其存储在 db 中。例如:- <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>
【讨论】: