关于hexo无法搜索的详细解决方案

遇到hexo无法搜索的问题已经好长时间了,每次点击搜索都会一直显示加载的圈圈。


(借用其他博客[1]的一张图,之前忘了截图了)

搜了一下网上的解决方案,大概明白了问题出在哪里,但是因为网上的教程多有些简略,也颇花了一些功夫才最终解决了该问题。因此在这里详细记录一步一步如何排除错误,或许能够帮助有同样问题的人。

问题及解决方案

总的来说,遇到以上长时间加载的大概率是编码(encoding)问题。在此之前,要保证正确安装了local search的包以及在配置文件正确打开了搜索功能(详细见网上其他教程,如[3]的第一部分)。

当保证了正确配置的情况下,还出现该问题。首先在Chrome中进入search.xml。具体也即进入你个人的网站的search.xml页面 www.yoursite.com/search.xml 。该页面是支持搜索功能的关键。

进入到xml文件后发现该页面存在错误。从错误提示可以看到是编码错误。

接下来右键进入inspect:

进入到审查界面:

选择Network选项卡:

此时需要重新刷新页面才能获得返回包。按刷新按钮或者command+R。点按search.xml,此时进入页面:

注意最开始的时候错误提示告诉我们在第几行有错误:

所以我们在②处定位到改行,可能该行内容很长很长,耐心一点看过去,找到红色点,把鼠标移上去可以看到:

那么这时候就可以通过搜索定位到这篇博文了。注意要用sublime/vscode打开该博文,其他普通的编辑器可能没办法看到该字符。

可以看到不知道为什么在这里引入了两个特殊字符。

此时用sublime打开所有博客所存的文件夹(我的是_post),然后全局替换该特殊字符为空就可以了。注意到替换时搜索的目标是<0x10>字符,而该字符是一个单字符,而不是由< 0 x 1 0 >组成的。所以如果直接用键盘输入进去是没用的,只能直接复制该字符。

全局替换:

至于为啥会引入这个符号,怀疑是复制其他文档的时候不小心引入的。

发现删掉了这个还不够,应该来说还有其他的。比如我删完再看,还有:

定位到具体位置:

没得办法,只能一个一个删了,直到search.xml不再出现错误:

最终,搜索框终于可以调出了:

Reference

[1] https://www.itfanr.cc/2017/11/24/resolve-hexo-blog-search-exception/
[2] https://juejin.im/post/5c85c5b7e51d45576e3cc9a5
[3] https://www.sqlsec.com/2017/12/hexosearch.html