在Spring MVC form-tag中:转义XML的值,而不是XHTML的值

时间:2014-03-23 12:41:58

标签: forms spring xhtml escaping

我使用Spring form taglib在我的xhtml页面中生成html-forms,该页面随Content-Type: application/xhtml+xml;charset=UTF-8一起提供。

默认情况下,taglib会转义HTML的字符,因此它会逃脱,例如德语变音符号üü对于HTML而言是正常的,但对于XML则不行 - 它会在客户端上导致未知的实体错误。

当然我仍然希望转义XML字符(如<),但不是完全有效的UTF-8字符。 taglib有一个选项escapeHTML我可以设置为false(甚至是web.xml中的全局),但是XML实体不再被转义。

令人惊讶的是谷歌没有在这里找到任何有用的东西。这不是一个不常见的问题,可以吗?

2 个答案:

答案 0 :(得分:0)

阅读资料来源,这有帮助!

转义符号是从包HtmlCharacterEntityReferences.properties中文件org.springframework.web.util的类路径加载的。

在classpath文件夹中的同一个包中创建一个具有相同名称的文件,其优先级高于spring-web.jar并具有以下内容:

160 = #160
34 = quot
38 = amp
39 = #39
60 = lt
62 = gt

你会很好。

它仍然感觉有点hackish ...我找不到任何关于此的文档,如果它不是一个记录的功能,它可能很容易在未来的版本中更改。也许有人有更好的解决方案......

答案 1 :(得分:0)

使用application/xhtml+xml提供的每个XHTML文档都应该有一个XHTML DOCTYPE声明。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

(或任何其他有效的XHTML DOCTYPE。)

声明中的DTD包含所有HTML实体名称,因此您可以根据需要使用所有HTML的命名引用。
也就是说,我认为Spring逃脱像ü这样的事情是很奇怪的。如果字符集是UTF-8,则不应该这样做。