[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > Perl > 正文
perl常問問題集--第九篇
譯者:陳彥銘 (2001-05-15 02:15:00)

目錄 
篇名 
概述 
我的 CGI script可在指令列下執行但無法從瀏覽器執行。您能不能幫我修修看? 
如何去除文章中的 HTML標簽? 
如何萃取 URLs? 
如何從 user端上傳資料?如何在另一台機器上開一個檔案? 
如何在 HTML中做 pop-up menu(跳出式選單)? 
如何抓 HTML檔案? 
如何解開或產生 Web上那些冠 %的碼? 
如何【將 requests】轉向到另一頁去? 
如何替網頁加上密碼? 
要怎麼用 Perl來編輯 .htpasswd和 .htgroup這兩個檔案? 
如何防范使用者藉由填我的 CGI表格來做壞事? 
如何解讀、萃取 email標頭資料? 
如何解譯 CGI表格? 
如何驗証 email位址? 
如何解 MIME/BASE64字串? 
如何根據使用者帳戶名稱自動合成 email位址? 
我的程式如何送/讀 email? 
如何找出我的主機名/網域名/IP位址? 
如何抓新聞討論群的文章或群組名錄? 
如何抓/丟 FTP檔案? 
如何用 Perl做 RPC? 
作者及版權事宜 

--------------------------------------------------------------------------------

篇名 
perlfaq9 -網路連線(原文版 Revision: 1.16, Date: 1997/04/23 18:12:06. 中文版 $Revision: 1.13 $, $Date: 1997/07/12 20:44:25 $) 


--------------------------------------------------------------------------------

概述 
本篇涵蓋網路連線、 Internet ,還有幾個關於 WWW 的問題。 


--------------------------------------------------------------------------------

我的 CGI script可在指令列下執行但無法從瀏覽器執行。您能不能幫我修修看? 
當然,但您恐怕付不起雇我們的簽約金 :-) 

說真的,如果您能夠先証明您已讀過下列這幾個 FAQs ,但遇到的問題並不單純、非言兩語即可回答的話,那麼您 post到 comp.infosystems.www.authoring.cgi上(如果是有關 HTTP 、 HTML ,或 CGI通信協定)的問題可能也會得到口氣和緩而有用的答覆。表面上看似 Perl,但骨子裡是 CGI之類的問題,如果 post到 comp.lang.perl.misc人家可能就不會這麼樂意地接受了。 

幾個實用的 FAQs 分別是: 

    http://www.perl.com/perl/faq/idiots-guide.html
    http://www3.pair.com/webthing/docs/cgi/faqs/cgifaq.shtml
    http://www.perl.com/perl/faq/perl-cgi-faq.html
    http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html
    http://www.boutell.com/faq/

【譯者】上面第份文件,Perl-CGI-FAQ的中譯版可在 http://2Ti.com/cgi-bin/2T/perl/perl-cgi-faq-chi/ 處取得。最後一份(WWW FAQ)的中譯版可自 http://www.acer.net/document/cwwwfaq/ 取得。 


--------------------------------------------------------------------------------

如何去除文章中的 HTML標簽? 
最正確(盡管不是最快)的方法是使用 HTML::Parse模組(可由 CPAN取得,是所有寫 Web程式者必備的 libwww-perl 套件的一部分)。 

許多人嘗試用簡陋的正規表示式來解決這個問題,譬如說像 s/<.*?>//g,但這個式子在很多情況下會失敗,因為要處理的字串可能會跨越斷行字元,也可能含有被 quote【跳脫】的箭頭號,或有 HTML comment出現;再加上一些疏忽,譬如,人們常忘了轉換如 <的 entities(跳脫字 元)。 

以下這個「簡陋」的方法對大多數的檔案都有效: 

    #!/usr/bin/perl -p0777
    s/<(?:[^>'"]*|(['"]).*?\1)*>//gs

如果您想要更完整的解法,請看部曲的 striphtml 程式, http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/striphtml.gz 。 


--------------------------------------------------------------------------------

如何萃取 URLs? 
一個快速但不完美的做法是 

    #!/usr/bin/perl -n00
    # qxurl - tchrist@perl.com
    print "$2\n" while m{
        < \s*
          A \s+ HREF \s* = \s* (["']) (.*?) \1
        \s* >
    }gsix;

這個版本並不替相對式寫法的 URLs 作調整,也不懂代換 bases【< LINK BASE=``...''>】,或如何處理 HTML comments、同時處理同一個標簽裡的 HREF和 NAME 屬性,或接受 URL形式的參數。同時,它要比一個較「完整」、利用 LWP [libwww-perl]模組套件的解法,例如 http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/xurl.gz這個程 式,快上一百倍。 


--------------------------------------------------------------------------------

如何從 user端上傳資料?如何在另一台機器上開一個檔案? 
如果是 HTML表格的話,您可以使用 multipart/form-data的編碼格式。 CGI.pm(可自 CPAN取得)中的 start_multipart_form()這個 method 就是為此設計的,它和 startform()這個 method 是兩回事。 


--------------------------------------------------------------------------------

如何在 HTML中做 pop-up menu(跳出式選單)? 
用 

相關文章
perl常問問題集--第九篇 (2001-05-15 02:15:00)
perl常問問題集--第八篇 (2001-05-15 01:15:01)
perl常問問題集--第七篇 (2001-05-15 00:15:00)
perl常問問題集--第六篇 (2001-05-14 23:15:00)
perl常問問題集--第二篇 (2001-05-14 22:15:00)
perl常問問題集--第三篇 (2001-05-14 21:15:00)
perl常問問題集--第一篇 (2001-05-14 20:15:00)
perl常問問題集--總篇 (2001-05-14 19:15:00)
 

★  樊強制作 歡迎分享  ★