看不到但摸得到的捣蛋鬼---Zero Width Space
看不到但摸得到的捣蛋鬼---Zero Width Space
1.情况如何?
昨天,“某某某”的代码出现了一个bug。大概是这个情况:
有一个提示信息,需要展示,大概这样:

这行文字,在谷歌上一点问题都没有,但是在ie上出现了奇怪的框框。比如这样:

ie浏览器真的是代码检查器啊,稍微一个不注意,就搞事情~~~
2.so why?
经过我的多次实验、摆弄,发现一件事,我在双引号和label之间按下退格键、方向键,会发现,总是多出来一次操作,方向键、退格键总是需要多按一次,才可以删除前双引号。很奇怪很奇怪。
于是,我百度“听大悲咒时应该保持什么心情”、“天台上怎么样不会太冷”。。。
功夫不负有心人,我找到了这个关键词-----Zero Width Space。
百度了一下:

3.这是个什么东西呢?
Zero-width space的Unicode编码为U+FEFF,二进制编码为“\xE2\x80\x8E”,根据维基百科描述,其主要用于后台处理字符边界而又无需可见空格的情况。
简言之:具有空格的功能,但宽度为零。
为了搞清,我这个小东西的unicode的编码是什么,我在这个链接下
http://tool.chinaz.com/tools/unicode.aspx
把我的那个符号考进去,点击中文转unicode,然后就这样:

备注:这种符号可能有很多,大家可以在探索其他的相似符号.
4.代码搞一搞
我敲了一段代码:
<input type="text" id="have10" />
<input type="text" id="have20" />
<script>
var uniCodeStr = "\u0008";
var str = eval("'"+uniCodeStr + "'")
var have10 = "10";
var have20 = "20";
for(var i = 0;i < 10 ; i++ ){
have10 += str;
}
for(var i = 0;i < 20 ; i++ ){
have20 += str;
}
document.getElementById('have10').value = have10;
document.getElementById('have20').value = have20;
</script>
ie上大概这样

谷歌上这样:

大家可以试一试,需要按10次退格键,才可以删到10的位置;需要按20次退格键,才可以删到20的位置。
是不是有一点恐怖?
看不到,但是又实实在在的存在。
5.危险
有这么几个场景,大家想象一下:
有人发了一个text文档,里面只有两个字母,但是接收时却卡死了电脑; qq上陌生人发来了两个字,手机却重启了; 数据库查询的时候,字段、sql看起来都对,但是却查不出想要的结果; url写的没问题,但是总是404~
6.解决
这个的话,百度搜索吧,方法也有很多,我就不赘述了
最后
你好!我是 JHCan333,公众号:爱生活的前端狗 的作者。公众号专注 前端工程师 方向,包括但不限于技术提高、职业规划、生活品质、个人理财等方面,会持续发布优质文章,从各个方面提升前端开发的幸福感。关注公众号,我们一起向前走!

看不到但摸得到的捣蛋鬼---Zero Width Space的更多相关文章
- 这价格看得我偷偷摸了泪——用python爬取北京二手房数据
如果想了解更多关于python的应用,可以私信我,或者加群,里面到资料都是免费的 http://t.cn/A6Zvjdun 近期,有个朋友联系我,想统计一下北京二手房的相关的数据,而自己用Excel统 ...
- 去除ZERO WIDTH SPACE 零宽字符: 看不见却占位置的字符
ZERO WIDTH SPACE 由于历史原因,编码方案中保留着该类编码 解决方案 1. 替换 ```js str.replace(/[\u200B-\u200D\uFEFF]/g, ''); ``` ...
- 看完这篇文章,我奶奶都懂了https的原理
本文在个人技术博客同步发布,详情可猛戳 亦可扫描屏幕右方二维码关注个人公众号 Http存在的问题 上过网的朋友都知道,网络是非常不安全的.尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵 ...
- [转帖]看完这篇文章,我奶奶都懂了https的原理
看完这篇文章,我奶奶都懂了https的原理 http://www.17coding.info/article/22 非对称算法 以及 CA证书 公钥 核心是 大的质数不一分解 还有 就是 椭圆曲线算法 ...
- 【Bug】看不见的分隔符: Zero-width space
今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...
- [BUG随想录] 看不见的分隔符: Zero-width space
今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...
- 初识JAVA之OOP
有一段时间没发博客了,每次手打还是很累,但感觉很充实.. 最近发现很多初学者到了面向对象编程这个知识点时,不太清楚类是如何转化成为对象的,很是困扰,今天我在这里谈谈我的理解,大家一起来研究学习... ...
- 3. UILable 的使用
1. 坐标系 来自:http://www.cnblogs.com/mcj-coding/p/5100455.html QQ: 863740091 如果在平面坐标系中我们要确定一个东西的位置和大小需 ...
- line-height的一点粗浅认识
line-height:有5种不同类型的单位. line-height: normal|inherit(继承)|%(百分比)|20px(像素值)|1.2(倍数); 将行高和字体大小结合: body { ...
随机推荐
- VMware 设置桥接方式 本机使用WLAN
最近使用开始VMware,以前一直用vritual box ,回归正题. 问题: VMware网络连接使用桥接方式如何做? 环境: 系统:centOS6.7 主机:win10 虚拟机:VMware10 ...
- html5 lineTo的使用例子
demo.js function draw(id) { var CANVAS=document.getElementById(id); var context=CANVAS.getContext('2 ...
- ubuntu 安装phpunit
一.下载安装 wget https://phar.phpunit.de/phpunit-7.2.phar chmod +x phpunit-7.2.phar sudo mv phpunit-7.2.p ...
- AGC001[BCDE] 题解
A没意思 F太难 所以大概近期的AGC题解都是BCDE的 然后特殊情况再说 开始刷AGC的原因就是计数太差 没有脑子 好几个学长都推荐的AGC所以就开始刷了 = = 大概两天三篇的速度?[可能也就最开 ...
- 【leetcode】892. Surface Area of 3D Shapes
题目如下: 解题思路:对于v = grid[i][j],其表面积为s = 2 + v*4 .接下来只要在判断其相邻四个方向有没有放置立方体,有的话减去重合的面积即可. 代码如下: class Solu ...
- springmvc的请求参数
@RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam("us ...
- PCB学习
一.PCB设置 在线DRC:自动更正,会提示短路. 对象捕捉>>智能元件snap,可以智能抓取中心点,勾选 智能TrackEnds: 撤销重做:30步 旋转步骤:90.000(可以按空格旋 ...
- BDE(一款数据库引擎,通过它可以连接不同数据库)
BDE(Borland Database Engine)是Inprise公司的数据库引擎,它结合了SQL Links允许程序员通过它能够连接到各种不同的数据库.BDE是BORLAND 数据库引擎的缩写 ...
- docker-swarm笔记
1.部署环境: centos7 创建三节点的 swarm 集群 swarm-manager 是 manager node : 192.168.1.150 swarm-worker1 和 swarm-w ...
- 控制透明度(兼容IE FF)
filter:alpha(opacity=70);opacity:0.7;