Markdown link 转义布局

Markdown link escaping layout

我有一个用 Bootstrap 和 Jekyll 制作的网站。我最近 运行 遇到一个问题,在博客 post 上,如果作者的姓名被超链接(例如 Google+ 个人资料),html 的片段显示在正文上方,就好像 HTML 语法被破坏了一样。我真的不知道如何解释它的样子,所以 here's a screenshot

博客post是用markdown写的,布局是一个单独的HTML文件。这里是the code in question, including the layout code,但是文件基本上是这样的:

--- layout: post (some other front matter metadata) ---

by [author](link)

未链接的作者姓名不存在此问题,博客提要页面也不会出现此问题。此外,如果我在副行上方的行中放置一些文本,该片段就会消失。我怎样才能摆脱这个错误?好像我的降价有误。

编辑:如果有帮助,我在 config.yml 中的降价荧光笔是 pygments

错误源于包含 html 输出的 gist 的第 16 到 18 行,这是它的来源:

<meta property="og:description" content="<p>by <a href="https://plus.google.com/+NickSuch/">Nick Such</a></p>

" >

这意味着生成的错误输出不是来自您的 post 布局或降价,而是主题中提供的 head 包含的方式正在解析数据。您必须将其追溯到 page 布局中使用的 header,因为 post 布局正在使用它。很有可能当您在 'by' 行上方添加一些文本时,生成的 HTML 已正确关闭,之后问题是 'hidden'。

参考评论,总结一下问题和解决方案:

主要问题是 post 包含的 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,因为 HTML 代码是不允许的在元属性中 content。这可以使用 strip_html Liquid 代码来完成,如@Erik. Read the documentation here

所述
<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | strip_html }}{% else %}{{ site.description | strip_html }}{% endif %}" />

(HTML 标签也应该用 / 关闭,如果它们 one-liners 正确关闭标签)

感谢,我想通了。

看起来问题出在页面布局中,其中有一个 meta 标记,如下所示:<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt }}{% else %}{{ site.description }}{% endif %}" >

它以第一段(在本例中是带link的by行)作为摘录,生成为HTML并放置在meta标签中。由于标签不能包含 HTML,它破坏了标签。

解决方案是将 strip_html liquid 标签放在 meta 中,这样它就可以传递纯文本,而不是 html: <meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | strip_html }}{% else %}{{ site.description }}{% endif %}" > 将其放在 _layouts/page.html 解决了。