解析Markdown时保留HTML实体

时间:2016-05-20 20:21:29

标签: markdown jekyll kramdown

我已经用尽了我的研究,尝试了许多方法没有效果,我希望我忽略了某种简单的解决方案:

我正在使用Jekyll网站为电子邮件生成HTML文件,并且需要将HTML实体用于特殊字符(例如em-dashes和智能引号),以避免不正确的符号解释(内容类型/字符集)由于我不会进入这里的复杂性,有时会从电子邮件头中删除。)

我的问题是解析我的Markdown似乎在输出为HTML时将我所有写入的HTML实体转换为特殊字符,并且我无法使用常用方法进行转义。当我在markdown中键入&rsquo;以生成正确的卷曲引号时,它会转换为HTML中的符号(而不是在我的HTML中保留&rsquo;)。如果我尝试使用反向标记来转义它,它将不会在HTML中转换&rsquo,但会将其放在<code>标记内,这会导致它呈现为&rsquo;而不是{{1} }。有没有办法为特殊字符保留输出的HTML实体,或者 - 甚至更好 - 在解析时将特殊字符转换为HTML实体(在HTML中)?

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

2 个答案:

答案 0 :(得分:2)

正如文档所述:

    --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。如果你有早期版本,那么事情可能无法正常工作。

答案 1 :(得分:2)

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

kramdown:
  entity_output: :as_input

请参阅documentation