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相关方法(有三个相关方法),在这里把取出的值中的页面空格转换成普通空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值