降价时自动命名锚点

时间:2012-09-27 20:17:04

标签: php regex markdown

我在PHP中使用Markdown并编写了一个正则表达式,以便在任何带有命名锚点<h1>-<h6>的{​​{1}}标记用于链接的情况下自动将文本包装在里面。

这是PHP:

<a name="Text">Text</a>

结果是:

$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);

重要的是,Markdown重量轻,易于存放空间。手动添加命名锚点会破坏使用Markdown的目的。

此方法适用于测试目的,但我想知道(这里是问题)是否有更好的,更强大的 与语言无关的 ,方式要做到这一点。

注意:客户端是这样的,想要这样,因为他们觉得即使是原生的Markdown语法也可能疏远他们更“计算机文盲”的用户:<p>This is a</p> <h1><a name="Test">Test</a></h1> <p>to see if this works </p> 。他们只想输入:# [Text](#Text)

1 个答案:

答案 0 :(得分:5)

看到你已经在使用PHP,你应该真正看看Markdown Extra实现。来自MDE文档:

  

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

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

## Header 2 ##      {#header2}
     

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

[Link back to header 1](#header1)