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
解决了。
我有一个用 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
解决了。