3

我在 PHP 中使用 Markdown 并编写了一个正则表达式,如果有任何<h1>-<h6>带有命名锚(<a name="Text">Text</a>)的标签用于链接,则自动将文本包装在其中。

这是PHP:

$text = '<p>This is a</p>
   <h1>Test</h1>
   <p>to see if this works </p>';

$regex = '/\<h([0-6]{1})\>(.+)\<\/h[0-6]{1}\>/';

echo preg_replace($regex, '<h$1><a name="$2">$2</a></h$1>', $text);

结果是:

<p>This is a</p>
<h1><a name="Test">Test</a></h1>
<p>to see if this works </p>

这里重要的是,Markdown 重量轻且易于存储空间。手动添加命名锚点完全违背了使用 Markdown 的目的。

这种方法可以很好地用于测试目的,但我想知道(这里是问题)是否有更好、更与语言无关的方法来实现这一点。

注意:这是给客户的,想要这样,因为他们觉得即使是原生 Markdown 语法也可能疏远他们更多“计算机文盲”的用户:# [Text](#Text). 他们只想输入:# Text

4

1 回答 1

5

既然您已经在使用 PHP,那么您真的应该看看Markdown Extra实现。来自 MDE 文档:

使用 PHP Markdown Extra,您可以将 id 属性设置为标题。您应该在行尾的标头之后的大括号内添加以哈希为前缀的 id,如下所示:

Header 1            {#header1}
========

## Header 2 ##      {#header2}

然后,您可以创建指向同一文档不同部分的链接,如下所示:

[Link back to header 1](#header1)
于 2012-09-27T20:21:06.257 回答