Ghost 的 Meta Description 限制156个字符,如果是输入中文的话,因为一个汉字占2个字符,所以理论上它默认的最多156个字符其实只能写78个汉字,再除去中文标点符号的话,就更少了,结果就是描述都没写多少,就因为超出字符数被截断,而出现下图中这样的乱码。

乱码演示

我找了半天,最后发现这里的字数限制在\core\build\scripts\ghost.min.js这个文件里有提及,如下图(截图为ghost-dev.js文件,压缩过的ghost.min.js和这个是一样的):

ghost-dev.js

另外模板文件\core\build\scripts\templates-dev.js里也有提及,不过起作用的应该是前者。把ghost.min.js文件里面的限制改了之后,我发现显示的限制字数是变了,但是输入超过68个中文字符后,依然会显示乱码。真是奇了怪了,又想了大半天,忽然想到说不定数据库里有限制,打开MySQL数据库一看,果然,meta_description的长度是200。

反过来再看,ghost.min.js中有几处验证meta_description长度的代码,如下图(截图为ghost-dev.js文件,压缩过的ghost.min.js和这个是一样的):

ghost-dev.js

于是我把文件中的200改成了更大一些的数值,顺带把MySQL中meta_description的长度也改成了同样的数值(改成了356,再次测试,发现到118个汉字时,如果再增加就会是乱码,118*3=354,这说明?),然后重启了下Ghost,再到后台发布文章测试了下,这会儿没有问题了。

meta_description

【注:本文所做修改仅仅是为了避免烦人的乱码,并不是这个问题的最佳解决办法,因为如果没有手动输入 Meta Description 的话,程序自己就会按照修改后的长度截取内容来做 Meta Description ,这显然是我们不想看到的。如果Ghost官方能考虑到中文占两个字符这个情况,对验证代码做一下调整使其同时适用中英文就再好不过了】