小黎今天肝计网的时候,发现有个地方加粗失效了
但是下面的加粗又是可以的!
小黎上网找了找原因发现…
震惊!真相竟然是这个…
(一天天震惊震惊的,怎么不吓死你
事件起因
效果就是下图那样啦,上面的式子不能加粗,下面的可以(这个笔记写太快了,有很多小问题,忽略就好啦…
事件分析
后面小黎上网发现,加粗的开始标记符(就是前面两个小星星),和结束标记符(就是后面的两个小星星)对前后内容是有要求的!
开始前先了解一下CommonMark规范吧
Markdown将
*
与_
作为强调指示符。被单个*
或_
包裹的文本将被HTML<em>
标签包裹(也就是斜体);被两个包裹的将被HTML<strong>
标签包裹(也就是粗体)。
先说几个关键词的意思吧~
定界符序列(delimiter run)
定界符类指的是:
- 一个或一串非转义的
*
; - 一个或一串非转义的
_
。
左侧定界符序列(left-flanking delimiter run)
左侧定界符序列是一个定界符序列,且:
- 后面不能是空白;
- 当前面没有空白或标点符号时,后面不能是标点符号。
右侧定界符序列(right-flanking delimiter run)
右侧定界符序列是一个定界符序列,且:
- 前面不能是空白;
- 当后面没有空白或标点符号时,前面不能是标点符号。
结合一下车祸现场吧
结合上方的例子,后面的**
的前面是标点符号,但后面却不是空白或标点符号,所以它不是右侧定界符序列,不会被当作是结束粗体的标识符,自然粗体就不生效了。
(就是人家的自我认知出了点差错,怪我怪我…
可是,为什么要这么定义?
为了能支持嵌套分隔符序列,**one **two two **three** two two** one**
:
one two two three two two one
这里就不具体说了,只能说懂的都懂(bushi
这样的影响是什么呢,就是使用非空格分词语言(比如中文)的用户只能骂骂咧咧地继续用下去
那怎么办!解决方案呢!
你多加个空格不就行了
相信大多数非强迫症患者会采用这个方案(就像我,但是感觉根源还是懒
可是哪个中国人写字没事加空格啊!
好吧,那试试零宽空格(zero-width space,ZWSP)
ZWSP长这样!锵锵!
什么?你说看不到?其实聪明的人才看得到
看不到就对啦,ZWSP是一种不可打印的Unicode
字符(U+200B
),用于可能需要换行处。
我们可以使用ZWSP指定长文字的换行位置;只有当荧幕宽度不足以单行显示时ZWSP才会起作用。
举个例子,没有使用 ZWSP 时是这样的:
LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongBreakBeforeHereLongLongLongLongLongLongLongLongLongLongLongLongLongLongText
使用ZWSP时是这样的
LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongBreakBeforeHereLongLongLongLongLongLongLongLongLongLongLongLongLongLongText
由于 ZWSP 这种特殊属性,它也被用于绕过敏感词检查、创造不可复制的伪链接等等。
回到之前的问题,只要在需要加空格的地方加上ZWSP就好啦~
这个字符可以在这里复制,点击copy就好啦
懒得截图了,还得上传图床