我有一个显示XHTML内容的JSP页面。我在JSP页面的顶部包含以下行:
<?xml version="1.0" encoding="UTF-8"?>
<% response.setContentType("application/xhtml+xml"); %>
<% request.setCharacterEncoding("UTF-8"); %>
如果我将上述行更改为:
<?xml version="1.0" encoding="UTF-8"?>
<% response.setContentType("application/xhtml+xml;charset=UTF-8"); %>
<% request.setCharacterEncoding("UTF-8"); %>
页面停止呈现并抛出XML解析错误,例如“我的javascript中某处预期的半冒号”或“找不到处理指令”等等。
从response.setContentType中删除“charset = utf-8”会使页面呈现。唯一的问题是→显示为查询标记“?”
答案 0 :(得分:1)
该页面停止呈现并抛出XML解析错误,例如“在我的javascript中某处预期的半冒号”或“未找到处理指令”等等。
如果您将XHTML声明为XML而不是“使用XML语法的HTML”,则会发生这种情况。确实摆脱了那个XML声明。如果可以的话,我会更进一步,只使用HTML作为真正的HTML,即使用<!doctype html>
或任何其他HTML strict
doctype。另请参阅http://hsivonen.iki.fi/doctype/。
<% request.setCharacterEncoding("UTF-8"); %>
第一个细节是request.setCharacterEncoding("UTF-8")
是多余的。在这个阶段,设置它已经为时已晚。第二个细节是你正在使用scriptlet。我建议不要这样做。在适当的地方使用taglibs / EL。如果那是不可能的,那么代码逻辑实际上属于Java类,直接或间接地存在于Servlet或Filter类中。
从response.setContentType中删除“charset = utf-8”会使页面呈现。唯一的问题是→显示为任务标记“?”
response.setContentType(..)
如果您已将其设置为HTML <meta>
中的<head>
标记,那么它就是多余的。
最后,您还需要设置响应字符编码(与设置内容类型不同!),如下所示:
<%@ page pageEncoding="UTF-8" %>
顺便说一下,这也为<meta>
隐式创建了content-type
标记。可以找到更多背景信息和提示here。
希望这有帮助。
答案 1 :(得分:1)
你可能有这样的代码:
<script type="text/javascript"> if (a && b) </script>
在XHTML模式下禁止,但在text/html
模式下必需。您可以在Sending XHTML as text/html Considered Harmful中找到有关此问题的说明。
代码如下:
<a href="foo?bar&baz">
任何版本的HTML或XHTML都不允许。它必须始终写成:
<a href="foo?bar&baz">
显然你没有使用XML序列化程序生成页面(它不会让你创建无效的实体或不正确编码的字符),因此我建议您使用HTML 4 Strict或HTML5-as- text/html
代替,哪种更适合手写标记。