Markdown 链接转义布局

问题描述 投票:0回答:2

我正在使用 Bootstrap 和 Jekyll 制作一个网站。我最近遇到一个问题,在博客文章中,如果作者的名字被超链接(例如,到 Google+ 个人资料),则正文上方会显示一段 html 片段,就好像 HTML 语法被破坏一样。

博文是用markdown写的,布局是一个单独的HTML文件。这是[有问题的代码,包括布局代码][2],但基本上文件是这样的:

`--- 布局:帖子 (一些其他的前沿元数据)

by [author](link)

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

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

html twitter-bootstrap markdown jekyll github-pages
2个回答
2
投票

该错误源于包含 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 标签是单行代码,则也应使用

/
来关闭标签以正确关闭标签)


2
投票

感谢@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
解决了它。

© www.soinside.com 2019 - 2024. All rights reserved.