我正在使用 Bootstrap 和 Jekyll 制作一个网站。我最近遇到一个问题,在博客文章中,如果作者的名字被超链接(例如,到 Google+ 个人资料),则正文上方会显示一段 html 片段,就好像 HTML 语法被破坏一样。
博文是用markdown写的,布局是一个单独的HTML文件。这是[有问题的代码,包括布局代码][2],但基本上文件是这样的:
by [author](link)
未链接的作者姓名不会出现此问题,并且该问题不会出现在博客提要页面上。另外,如果我在副行上方的行中放置一些文本,该片段就会消失。我怎样才能摆脱这个错误?我的 markdown 好像有错误。
编辑:如果有帮助的话,我在 config.yml 中的 Markdown 荧光笔是 pygments
该错误源于包含 html 输出的要点的第 16 至 18 行,这就是它的来源:
<meta property="og:description" content="<p>by <a href="https://plus.google.com/+NickSuch/">Nick Such</a></p>
" >
这意味着生成的错误输出不是来自您的帖子布局或降价,而是提供的
head
包含在主题中的方式正在解析数据。您必须将其追溯到 page
布局中使用的标题,因为帖子布局正在使用它。当您在“by”行上方添加一些文本时,生成的 HTML 可能会正确关闭,之后问题就被“隐藏”了。
参考评论,这里总结一下问题和解决方案:
主要问题是该帖子包含的 Markdown 会被解析为 HTML 标签,然后放入
og:description
meta property
中。
这是主题布局的
header
中的原始模板代码。
<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt }}{% else %}{{ site.description }}{% endif %}" >
此问题的解决方案是在将所有 HTML 放入
meta property
之前将其删除,因为元属性中不允许包含 HTML 代码content
。这可以使用 strip_html
Liquid 代码来完成,正如 @Erik 所提到的。 在此处阅读文档
<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | strip_html }}{% else %}{{ site.description | strip_html }}{% endif %}" />
(如果 HTML 标签是单行代码,则也应使用
/
来关闭标签以正确关闭标签)
感谢@Erikgillespie,我明白了。
看起来问题出在页面布局中,其中有一个
meta
标签,如下所示:<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt }}{% else %}{{ site.description }}{% endif %}" >
它以第一段(在本例中为带有链接的行)作为摘录,该摘录生成为 HTML 并放置在
meta
标签中。由于标签不能包含 HTML,因此它破坏了标签。
解决方案是将
strip_html
液体标签放在 meta
中,这样它就传递纯文本,而不是 html: <meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | strip_html }}{% else %}{{ site.description }}{% endif %}" >
将其放入 _layouts/page.html
解决了它。