不少兄弟升级Typecho到1.3.0版本后,发现之前写的Markdown表格突然“变样”了——
明明格式没改,表格愣是解析不出来,
光剩一堆竖线横线的纯文本。
一开始我还以为是升级出了BUG,
扒拉了半天代码才发现,压根不是程序出问题,
而是官方故意把表格解析规则调严了,
就是为了不让那些不是表格的内容被误认成表格。
一、到底是哪儿变了?
咱先不说虚的,直接说核心——Typecho解析Markdown表格靠的是/var/Utils/HyperDown.php这个文件,1.3.0版本把这文件第1040行的正则表达式给改了,就改了这么一点,表格写法的规矩就不一样了。
1.2.1版本:单横线就能混过去
之前用1.2.1的时候,表格分隔线写|-|-|这种单横线,系统都认:
/^((?:(?:(?:\||\+)(?:[ :]*\-+[ :]*)(?:\||\+))|(?:(?:[ :]*\-+[ :]*)(?:\||\+)(?:[ :]*\-+[ :]*))|(?:(?:[ :]*\-+[ :]*)(?:\||\+))|(?:(?:\||\+)(?:[ :]*\-+[ :]*)))+)$/这正则就像单位里的老规矩,睁一只眼闭一只眼,只要有横线就给过。
1.3.0版本:最少得俩杠,少一个都不行
升级到1.3.0之后,正则里多了个{2,}的限制,意思就是“最少俩横线”:
/^\s*(\|?[ :]*-{2,}[ :]*(?:[\|\+][ :]*-{2,}[ :]*)*\|?)\s*$/现在你再写|-|-|,系统直接不认了,必须写成|--|--|或者|---|---|这种,才能正常解析成表格。
二、官方为啥要这么改?不是没事找事
我去GitHub上翻了翻,发现开发者70去年7月就把这正则改好了,放到1.3.0里可不是瞎折腾——
纯粹应该是为了“防误解析”。
你想啊,有时候咱写文章,难免会打出| - | - |这种格式,
以前的单横线规则很容易把这些不是表格的内容,
误判成表格,排版就乱了。
现在要求最少俩横线,相当于给表格加了个“身份标识”,
只有真表格才会被解析,那些不小心写的竖线横线,
就老老实实当普通文本待着,排版反而更规整了。
三、咱该咋弄?就俩办法,简单得很
知道了原因,解决起来就没那么多弯弯绕绕,选一个适合自己的就行:
1. 改写法,跟着新规矩走(推荐)
这是最省事的,不用动代码,就把表格里的单横线换成双横线就行。
比如以前这么写:
|字段|说明|
|-|-|
|标题|文章标题|现在改成这样
|字段|说明|
|--|--|
|标题|文章标题|就多写一个横杠的事儿,符合官方新规则,以后也不会出问题。
2. 改代码,让老写法继续用
要是你博客里老文章全是单横线表格,懒得一个个改,
也能把正则改回老版本的——不过先提醒一句,改之前最好备份一下HyperDown.php文件,
别手滑改错了。
直接打开/var/Utils/HyperDown.php,
找到第1040行,把新的正则换回1.2.1版本的那串,保存之后刷新页面,
或者简单改一下把-{2,}改成-+,即:
/^\s*(\|?[ :]*-{2,}[ :]*(?:[\|\+][ :]*-+[ :]*)*\|?)\s*$/单横线表格就又能用了。
四、最后唠两句
说实话,一开始我也觉得这改动有点“折腾”,
但细想下来,官方这波是为了长远考虑——规则严一点,排版出错的概率就小一点。
咱写博客的,本来就是图个内容规整,多写一个横杠也费不了啥事儿,
跟着新规则走,反而能避免以后出现更多排版问题。
当然了,要是你就偏爱单横线的写法,改回老正则也没啥毛病,
怎么顺手怎么来。反正核心就一个:1.3.0的Typecho表格,
分隔线最少得俩横杠,记着这事儿,就不会踩坑了。
仅有 1 条评论