将换行符转换为空格对英文有意义,例如以下 HTML:
<p>
This is
a sentence.
</p>
我们在浏览器中将换行符转换为空格后得到以下结果:This is a sentence.
这对英语很好,但对于中文字符就不好了,因为我们在中文中不使用空格来分隔单词。这里有一个例子(中文句子的意思与“这是一个句子”相同):
<p>
这是
一句话。
</p>
我在Chrome、Safari和IE上得到了以下结果...
这是 一句话。
...但我想要的是没有额外空格的以下内容:
这是一句话。
我不知道为什么在当前行的最后一个字符和下一行的第一个字符都是中文字符时,浏览器为什么不忽略换行符(我认为这样更合理)。或者说他们提供了这种机制,但需要特殊处理?
顺便说一句,在Vim中,使用“J”来连接行时,如果两行的最后一个字符和第一个字符都是中文字符,则不会添加空格。但对于英文,则会添加空格。因此,我猜Vim对此进行了特殊处理。
更新:
虽然我认为这是浏览器的问题,但我必须接受这个现实。因此,目前我会预处理我的Markdown文本以连接中文行,然后再生成HTML。以下是我在Ruby中执行此操作的方式,完整代码还包括处理中文标点符号,可在 gist 上找到。
#encoding: UTF-8
# Requires ruby 1.9.x, and assume using UTF-8 encoding
class String
# The regular expression trick to match CJK characters comes from
# https://dev59.com/P2445IYBdhLWcg3w0ddD#4681577
def join_chinese
gsub(/(\p{Han})\n(\p{Han})/m, '\1\2')
end
end