解析 Markdown 时保留 HTML 个实体

Retain HTML Entities When Parsing Markdown

我用尽了我的研究并尝试了很多方法都没有效果,我希望我忽略了一些简单的解决方案:

我正在使用 Jekyll 站点为 e-mail 生成 HTML 文件,需要使用 HTML 实体来表示特殊字符(例如 em-dashes 和智能引号)为了避免不正确的符号解释(由于复杂性,content-type/charset 有时会从 e-mail 头部删除。我不会在这里介绍。)

我的问题是,当输出为 HTML 时,解析我的 Markdown 似乎会将我编写的所有 HTML 实体转换为特殊字符,并且我无法使用常用方法进行转义。当我在 markdown 中键入 &rsquo; 以生成右弯引号时,它会在我的 HTML 中转换为 符号(而不是在我的 HTML 中保留 &rsquo; ).如果我尝试使用 back-ticks 转义它,它不会在 HTML 中转换 &rsquo 而是将它放置在 <code> 标签内,这导致它呈现为 &rsquo;而不是 。有没有办法为特殊字符保留 typed-out HTML 实体,或者——甚至更好——在解析时将特殊字符转换为 HTML 实体(在 HTML 中)?

我在 Jekyll 中使用 Kramdown markdown 解析器。我什至将 Kramdown 中的 entity_output 选项指定为 : as_input 但没有成功。非常感谢任何帮助!

如文档所述:

    --entity-output ARG
     Defines how entities are output

     The possible values are :as_input (entities are output in the same
     form as found in the input), :numeric (entities are output in numeric
     form), :symbolic (entities are output in symbolic form if possible) or
     :as_char (entities are output as characters if possible, only available
     on Ruby 1.9).

     Default: :as_char
     Used by: HTML converter, kramdown converter

所以让我们试试这些选项:

$ kramdown --version
1.11.1 
$ kramdown
&lsquo;foo&rsquo;
<p>‘foo’</p>
$ kramdown --entity-output=as_input
&lsquo;foo&rsquo;
<p>&lsquo;foo&rsquo;</p>
$ kramdown --entity-output=symbolic
&lsquo;foo&rsquo;
<p>&lsquo;foo&rsquo;</p>
$ kramdown --entity-output=numeric
&lsquo;foo&rsquo;
<p>&#8216;foo&#8217;</p>
$ kramdown --entity-output=as_char
&lsquo;foo&rsquo;
<p>‘foo’</p>
$ ruby --version
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

请注意,我有 Kramdown 1.11 版和 Ruby 1.9 版。如果您有早期版本,那么事情可能无法正常工作。

在您的 _config.yml 中,您可以将 kramdown 配置为保留 html 实体,因为它们是在您的代码中编写的:

kramdown:
  entity_output: :as_input

documentation