转载于:http://blog.csdn.net/foamflower/article/details/4678312
最近在做全文检索模块功能的测试,发现对于特殊符号的处理还存在很大的问题。
有人说Spring本身提供了对HTML、javascript、sql语句的转码工具类,但是测试了一下发现其HtmlUtils.htmlEscape()对单引号并没做处理,只是转码了以下几个特殊字符:
- &:&
- " :"
- < :<
- > :>
后来采用replace替换为('),IE浏览器里依然没有起到作用,只好在google里测试一下查看源代码,发现其转码成(')
今天看到下面这篇文章才明白:
转:http://blog.huachen.me/single-quote-ie-html-entity
在 (x)HTML 中,一些特殊字符应该进行 HTML 实体转义。
常见的有:&(and)、"(双引号)、'(单引号)、<(小于号)、>(大于号),这些在 (x)HTML 文档内容中应该分别转换成:&、"、'、< 和 >。
但是问题就来了,为什么上面单引号的转义和别的特殊字符不同呢?为什么唯独单引号用的是实体编号('),而其它的用的是实体名称(')呢?
原因就是 IE 浏览器暂时不支持单引号的实体名称,IE 浏览器暂时只支持单引号的实体编号。
这也是 PHP htmlspecialchars 函数把单引号转义成 ',而不是 ' 的原因。
另外,百度也不支持单引号的实体名称,这个是我在我的博客在百度搜索结果中看出来的(现在我已经把单引号改成实体编号的形式了)。
这里可以查看 HTML 的所有特殊字符的实体编号和实体名称。
主要是这段内容:
Reserved Characters in HTML
Some characters are reserved in HTML and XHTML. For example, you cannot use the greater than or less than signs within your text because the browser could mistake them for markup.
HTML and XHTML processors must support the five special characters listed in the table below:
Character Entity Number Entity Name Description " " " quotation mark ' ' ' (does not work in IE) apostrophe & & & ampersand < < < less-than > > > greater-than Note: Entity names are case sensitive!