我想创建一个好的语法,以便更容易链接到内部事物,有点像Wiki,所以也许我认为用户可以使用类似的东西:
Bah bah bah reference: [[a]]
它会将其转换为HTML:
Bah bah bah reference: <a href="..../id=a">title</a>
但我担心感叹和安全问题。选择什么是好的语法(可能是[[]]或其他什么)以及它的安全正则表达式是什么?
答案 0 :(得分:7)
不要重新发明轮子:Text::Markdown。
答案 1 :(得分:3)
虽然思南使用现有语法(例如Markdown)的想法很好,但这种方法的可行性取决于您的具体情况。你没有告诉我们足够的回应。您是从一张白纸开始还是继承了大量需要昂贵的转换过程的现有文件,更不用说员工再培训了?
如果是后者,有时最好通过思考短期变通方法和长期战略来解决问题。短期解决方法 - 某种类型的本土语法正如你的问题中提出的那样 - 将是丑陋的,可能会在这里和那里引起麻烦,但它可以完成工作。例如,我们的组织有大量Word文档,最终为HTML页面提供内容。在这些Word文件中,工作人员使用这样的方法来创建链接并进行我们的解析代码处理的一些其他声明:##some_link##
。有很多方法可以解决这个问题,但是在我们正在制作的内容类型中,它很少发生。部分由于这个原因,很难对将内容迁移到更强大的系统的长期策略产生很大的热情。我的期望是会发生这样的迁移,但它是由更大的考虑因素驱动的,而不是我们的##foo##
标记设备的限制。
<强>更新强>
根据您的其他评论,听起来您将拥有一个链接列表,您希望用户能够使用短ID快速添加这些链接。因此,这些链接将在某个地方定义,比如Perl哈希。您可以使用此哈希来防止无效条目。例如:
use strict;
use warnings;
my %approved_links = (
so_perl => 'http://stackoverflow.com/questions/tagged/perl',
so_ruby => 'http://stackoverflow.com/questions/tagged/ruby',
);
my $regex = qr/ \[\[ ([^\]]+) \]\] /x;
while (<DATA>){
die "Danger: $_\n" if map {
exists $approved_links{$_} ? () : ($_)
} /$regex/g;
s/$regex/$approved_links{$1}/g; # Not complete, but you get the idea.
print;
}
__DATA__
Some text [not an id] [[so_perl]] more [[so_ruby]] more..
[[so_perl]] blah [[so_ruby]] blah
[[bad id!!]]
答案 2 :(得分:1)