`
hellohank
  • 浏览: 143932 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HTML的空格与程序中的空格不同!

阅读更多

今天遇到一个诡异的问题,在系统的搜索页面的输入框中输入了一个字符串,前面带有空格,提交搜索,正常!再点搜索,擦,居然无法搜到结果!

 

于是查找原因吧,过程简短说明一下:

 

 首先,我看了一下URL中的值,本来空格应该是个“+”号,第一次查询确实是,可从第二次之后就不是了,浏览器输入框中URL这个词前面就是一个空格!见鬼了!因为URL中空格肯定必须得是“+”号!查看URL,发现这个空格编码为“%C2%A0”!尼玛,这是什么东西?!我的URL可是UTF-8编码,怎么会这样?!这又是个什么东西?

 

然后,我又查,本来好好一个空格,第二次提交时怎么就变成了这个鬼?!查了一下,页面的输入框回显也没有问题啊!这到底是什么情况?!

 

于是,我在Filter中截住请示,把搜索内容获取出来,将这个空格转换为char,一看之下,它的char=160!160是什么东东??上网一查,我呵呵了~~

 

空格的转义字符分为如下几种:

1.  &160#;不断行的空白(1个字符宽度)

2.  &8194#;半个空白(1个字符宽度)

3.  &8195#;一个空白(2个字符宽度)

4.  &8201#;窄空白(小于1个字符宽度)

 

看到第一条,我想大家应该知道了,我们在页面上显示信息时,是需要转义的(防Xss攻击),我们系统里面,因为内容显示的要求,我把所有空格转义成了“ ”的html空格!问题就这样产生了!

 

唉,人老啦,记性就不太好~记录一下吧,偶尔温故一下。同时,与诸君共勉!

 

PS:说一下我的解决方案吧:在系统的第一个Filter里面使用自定义的一个HttpServletWrapper把当前request包裹一下,重写里面的getParameter相关方法(有三个相关方法),在这里把取出的值中的页面空格转换成普通空格。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics