我在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)
答案 0 :(得分:5)
看到你已经在使用PHP,你应该真正看看Markdown Extra实现。来自MDE文档:
使用PHP Markdown Extra,您可以将id属性设置为标题。你应该在后面的花括号内添加一个以哈希为前缀的id 该行末尾的标题,如下所示:
Header 1 {#header1} ======== ## Header 2 ## {#header2}
然后您可以创建指向同一文档不同部分的链接,如下所示:
[Link back to header 1](#header1)