2009-10-07 41 views
1

我想創造一個良好的語法使其更容易鏈接到內在的東西,有點像一個Wiki,所以也許我想用戶可以使用這樣的:什麼是HTML鏈接降價的好語法,使內部鏈接更容易?

Bah bah bah reference: [[a]] 

而且,它還將其轉換到HTML:

Bah bah bah reference: <a href="..../id=a">title</a> 

但我擔心感嘆詞和安全問題。什麼是一個好的語法來選擇(也許[[]]或其他),什麼是安全的正則表達式?

回答

3

儘管思南使用現有語法(如Markdown)的想法很好,但這種方法的可行性取決於您的具體情況。你沒有告訴我們足夠的迴應。你是從一個空白的石板開始,還是繼承了大量現存文件,這需要昂貴的轉換過程,更不用說員工再培訓了?

如果是後者,有時最好通過考慮短期解決方法和長期策略來解決問題。短期的解決方法 - 就像您提出的問題中提出的某種本土語法 - 會很醜陋,可能會引起麻煩,但它可以完成工作。例如,我們的組織有大量的Word文檔,最終爲HTML頁面提供內容。在這些Word文件中,工作人員使用這種方法來創建鏈接,並製作一些我們的解析代碼處理的其他聲明:##some_link##。有很多方法會失敗,但在我們製作的內容類型中,很少發生。部分出於這個原因,很難對將內容遷移到更強大系統的長期策略產生太大的熱情。我的期望是會發生這樣的遷移,但這是由更大的考慮因素驅動的,而不是我們的標記設備的限制。

更新:

根據您的補充意見,這聽起來像你將有你希望你的用戶能夠快速添加,使用短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!!]] 
+0

這是一個主要的文本摘要部分,我有一個基於樹的解析器,可以驗證並剝離HTML(第三方),但我希望功能允許一些內部鏈接,例如wikipedia的語法與[[Article Name] ]會自動翻譯成鏈接。我想這樣做,同時確保人們不能把任何危險放在裏面.. – Timmy 2009-10-07 21:03:22

7

不要重新發明輪子:Text::Markdown

+1

我知道Markdown/etc。我實際上正在考慮一個額外的層,以便使某些鏈接更容易,例如,使用鍵鏈接到內部網站,而不是自己解析所有內容,或者鏈接到具有捷徑的標記列表。 – Timmy 2009-10-07 19:58:57