iblogc

不间断空格 C2 A0 - Non-breaking space

 不间断空格 C2 A0 - Non-breaking space
2022-11-16 · 3 min read

背景:用户反馈了一个问题,短信里的链接点不开,排查后发现在部分手机上会偶现链接后面带空格了还会把后面内容当成链接内容的情况,因为我们放到短信里的都是我们自己的短链,所以不存在繁杂的请求路径的情况,所以就想一个服务端的解决方案,在接收到请求后把路径用空格分割下,只取第一段内容作为路径,就是把 xxxx.com/1ERXTa 确认您…… 请求过来的路径参数 1ERXTa 确认您…… 处理成 1ERXTa, 写好代码自己编了一个测试数据测试通过,用用户短信里的链接数据测试失败,后面通过浏览器地址栏查看发现,自己编的测试数据空格经过 url 编码后是 %20, 用户短信里的链接点击打开后空格经过 url 编码后是 % C2% A0,两个空格竟然不一样。

经过一系列的测试,发现两个空格的确有区别

Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.parse
>>>
>>> s1 = ' '
>>> s2 = ' '
>>>
>>> s1.encode (encoding="utf-8")
b'\xc2\xa0'
>>> s2.encode (encoding="utf-8")
b' '
>>>
>>> urllib.parse.quote (s1)
'% C2% A0'
>>> urllib.parse.quote (s2)
'%20'

根据关键词 Google 了下,原来有一个叫 不间断空格 的东西。它有两个作用,一是阻止两端的内容被自动换行分开,二是防止连续的空格字符被合并成单个空格。我也数据测试了下这两种现象,表现的确有差异。

阻止两端的内容被自动换行分开(在网页中可以用   来表示不间断空格):
下面这段文字是用  (不间断空格)拼接
这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 

下面这段文字里是用 (空格)字符拼接
这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本 这 是 测 试 文 本

防止连续的空格字符被合并成单个空格:
下面尖括号中间有 10 个  (不间断空格)
<          >
下面尖括号中间有 10 个 (空格)
< >

更加详细的说明可以看:https://www.cnblogs.com/lingyejun/p/13056754.html