⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perlfaq9.html

📁 《Perl 5教程》及《perl常问问题集》
💻 HTML
📖 第 1 页 / 共 2 页
字号:
    <HTML> 	<HEAD> 	    <TITLE>perlfaq9</TITLE> 	</HEAD>	<BODY background="gback.jpg"><H1>perlfaq9 - perl常问问题集,第九篇</H1><p><p><H2><A NAME="INDEX">目录</A></H2><!-- INDEX BEGIN --><UL>	<LI><A HREF="#_g_W">篇名</A>	<LI><A HREF="#_z">概述</A>	<UL>		<LI><A HREF="#_CGI_script_i_b_O_C_U_">我的 CGI script可在指令列下执行但无法从浏览器执行。您能不能帮我修修看?</A>		<LI><A HREF="#_p_h_HTML_H">如何去除文章中的 HTML标签?</A>		<LI><A HREF="#_p_URLs_H">如何萃取 URLs?</A>		<LI><A HREF="#_p_q_user_W_H_p_b_t">如何从 user端上传资料?如何在另一台机器上开一个档案?</A>		<LI><A HREF="#_p_b_HTML_pop_up_menu_">如何在 HTML中做 pop-up menu(跳出式选单)?</A>		<LI><A HREF="#_p_HTML_H">如何抓 HTML档案?</A>		<LI><A HREF="#_p_Web_W_a_">如何解开或产生 Web上那些冠 %的码?</A>		<LI><A HREF="#_p_i_N_requests_j_V_t_">如何【将 requests】转向到另一页去?</A>		<LI><A HREF="#_p_W_K_X_H">如何替网页加上密码?</A>		<LI><A HREF="#_n_Perl_s_htpasswd_">要怎麽用 Perl来编辑 .htpasswd和 .htgroup这两个档案?</A>		<LI><A HREF="#_p_d_CGI_">如何防范使用者藉由填我的 CGI表格来做坏事?</A>		<LI><A HREF="#_p_B_email_Y_H">如何解读、萃取 email标头资料?</A>		<LI><A HREF="#_p_CGI_H">如何解译 CGI表格?</A>		<LI><A HREF="#_p_email_H">如何验证 email位址?</A>		<LI><A HREF="#_p_MIME_BASE64_r_H">如何解 MIME/BASE64字串?</A>		<LI><A HREF="#_p_b_W_X_e">如何根据使用者帐户名称自动合成 email位址?</A>		<LI><A HREF="#_p_e_email_H">我的程式如何送/读 email?</A>		<LI><A HREF="#_p_X_D_W_W_IP_">如何找出我的主机名/网域名/IP位址?</A>		<LI><A HREF="#_p_s_D_Q_s_s_W_">如何抓新闻讨论群的文章或群组名录?</A>		<LI><A HREF="#_p_FTP_H">如何抓/丢 FTP档案?</A>		<LI><A HREF="#_p_Perl_RPC_H">如何用 Perl做 RPC?</A>	</UL>	<LI><A HREF="#_v_y">作者及版权事宜</A></UL><!-- INDEX END --><HR><P><H1><A NAME="_g_W">篇名</A></H1>perlfaq9 -网路连线(原文版 Revision: 1.16, Date: 1997/04/23 18:12:06.中文版 $Revision: 1.13 $, $Date: 1997/07/12 20:44:25 $)<P><P><HR><H1><A NAME="_z">概述</A></H1>本篇涵盖网路连线、 Internet ,还有几个关於 WWW 的问题。<P><P><HR><H2><A NAME="_CGI_script_i_b_O_C_U_">我的 CGI script可在指令列下执行但无法从浏览器执行。您能不能帮我修修看?</A></H2>当然,但您恐怕付不起雇我们的签约金 :-)<P>说真的,如果您能够先证明您已读过下列这几个 FAQs ,但遇到的问题并不单纯、非叁言两语即可回答的话,那麽您 post到 comp.infosystems.www.authoring.cgi上(如果是有关 HTTP HTML ,或 CGI通信协定)的问题可能也会得到口气和缓而有用的答覆。表面上看似 Perl,但骨子里是 CGI之类的问题,如果 post到 comp.lang.perl.misc人家可能就不会这麽乐意地接受了。<P>几个实用的 FAQs 分别是:<P><PRE>    <A HREF="../../tppmsgs/msgs0.htm#88" tppabs="http://www.perl.com/perl/faq/idiots-guide.html">http://www.perl.com/perl/faq/idiots-guide.html</A>    <A HREF="../../tppmsgs/msgs0.htm#90" tppabs="http://www3.pair.com/webthing/docs/cgi/faqs/cgifaq.shtml">http://www3.pair.com/webthing/docs/cgi/faqs/cgifaq.shtml</A>    <A HREF="../../tppmsgs/msgs0.htm#91" tppabs="http://www.perl.com/perl/faq/perl-cgi-faq.html">http://www.perl.com/perl/faq/perl-cgi-faq.html</A>    <A HREF="../../tppmsgs/msgs0.htm#92" tppabs="http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html">http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html</A>    <A HREF="../../tppmsgs/msgs0.htm#93" tppabs="http://www.boutell.com/faq/">http://www.boutell.com/faq/</A></PRE><P>【译者】上面第叁份文件,Perl-CGI-FAQ的中译版可在 <AHREF="../../tppmsgs/msgs0.htm#94" tppabs="http://2ti.com/cgi-bin/2T/perl/perl-cgi-faq-chi/">http://2Ti.com/cgi-bin/2T/perl/perl-cgi-faq-chi/</A>处取得。最後一份(WWW FAQ)的中译版可自 <AHREF="../../tppmsgs/msgs0.htm#95" tppabs="http://www.acer.net/document/cwwwfaq/">http://www.acer.net/document/cwwwfaq/</A>取得。<P><P><HR><H2><A NAME="_p_h_HTML_H">如何去除文章中的 HTML标签?</A></H2>最正确(尽管不是最快)的方法是使用 HTML::Parse模组(可由 CPAN取得,是所有写 Web程式者必备的 libwww-perl 套件的一部分)。<P>许多人尝试用简陋的正规表示式来解决这个问题,譬如说像<CODE>s/&lt;.*?&gt;//g</CODE>,但这个式子在很多情况下会失败,因为要处理的字串可能会跨越断行字元,也可能含有被 quote【跳脱】的箭头号,或有 HTML comment出现;再加上一些疏忽,譬如,人们常忘了转换如 <CODE>&lt;</CODE>的 entities(跳脱字 元)。<P>以下这个「简陋」的方法对大多数的档案都有效:<P><PRE>    #!/usr/bin/perl -p0777    s/&lt;(?:[^&gt;'&quot;]*|(['&quot;]).*?\1)*&gt;//gs</PRE><P>如果您想要更完整的解法,请看叁部曲的 striphtml 程式, <A HREF="../../tppmsgs/msgs1.htm#124" tppabs="http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/striphtml.gz">http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/striphtml.gz</A> <P><P><HR><H2><A NAME="_p_URLs_H">如何萃取 URLs?</A></H2>一个快速但不完美的做法是<P><PRE>    #!/usr/bin/perl -n00    # qxurl - tchrist@perl.com    print &quot;$2\n&quot; while m{        &lt; \s*          A \s+ HREF \s* = \s* ([&quot;']) (.*?) \1        \s* &gt;    }gsix;</PRE><P>这个版本并不替相对式写法的 URLs 作调整,也不懂代换 bases【&lt;LINK BASE=``...''&gt;】,或如何处理 HTML comments、同时处理同一个标签里的 HREF和 NAME 属性,或接受 URL形式的参数。同时,它要比一个较「完整」、利用 LWP [libwww-perl]模组套件的解法,例如 <A HREF="../../tppmsgs/msgs1.htm#125" tppabs="http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/xurl.gz">http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/xurl.gz</A>这个程 式,快上一百倍。<P><P><HR><H2><A NAME="_p_q_user_W_H_p_b_t">如何从 user端上传资料?如何在另一台机器上开一个档案?</A></H2>如果是 HTML表格的话,您可以使用 <STRONG>multipart/form-data</STRONG>的编码格式。 CGI.pm(可自 CPAN取得)中的 <CODE>start_multipart_form()</CODE>这个 method 就是为此设计的,它和 <CODE>startform()</CODE>这个 method 是两回事。<P><P><HR><H2><A NAME="_p_b_HTML_pop_up_menu_">如何在 HTML中做 pop-up menu(跳出式选单)?</A></H2>用 <STRONG>&lt;SELECT&gt;</STRONG> 和 <STRONG>&lt;OPTION&gt;</STRONG>这两个标签。 CGI.pm模组(可由 CPAN取得)对这个 widget【此指跳出式选单这个介面成分】还有许多其他的介面成分都有支援【即有制作动态标签的函式】,其中有些是以巧妙模拟的方 式达成。<P><P><HR><H2><A NAME="_p_HTML_H">如何抓 HTML档案?</A></H2>有一个方法是,如果您的系统上装有 lynx一类的文字模式的 HTML浏览器的话,那麽可以这麽做:<P><PRE>    $html_code = `lynx -source $url`;    $text_data = `lynx -dump $url`;</PRE><P>收录在 CPAN里的 libwww-perl (LWP)模组则提供了更强的方法来做这件事。它不但可钻过 proxies,而且也不需要 lynx:<P><PRE>    # print HTML from a URL    use LWP::Simple;    getprint &quot;<A HREF="../../tppmsgs/msgs1.htm#126" tppabs="http://www.sn.no/libwww-perl/&quot">http://www.sn.no/libwww-perl/&quot</A>;;</PRE><P><PRE>    # print ASCII from HTML from a URL    use LWP::Simple;    use HTML::Parse;    use HTML::FormatText;    my ($html, $ascii);    $html = get(&quot;<A HREF="../../tppmsgs/msgs1.htm#127" tppabs="http://www.perl.com/&quot">http://www.perl.com/&quot</A>;);    defined $html        or die &quot;Can't fetch HTML from <A HREF="../../tppmsgs/msgs1.htm#127" tppabs="http://www.perl.com/&quot">http://www.perl.com/&quot</A>;;    $ascii = HTML::FormatText-&gt;new-&gt;format(parse_html($html));    print $ascii;</PRE><P><P><HR><H2><A NAME="_p_Web_W_a_">如何解开或产生 Web上那些冠 %的码?</A></H2>以下是一个解码的实例:<P><PRE>    $string = &quot;<A HREF="../../tppmsgs/msgs1.htm#128" tppabs="http://altavista.digital.com/cgi-bin/query?pg=q&amp">http://altavista.digital.com/cgi-bin/query?pg=q&amp</A>;what=news&amp;fmt=.&amp;q=%2Bcgi-bin+%2Bperl.exe&quot;;    $string =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/ge;</PRE><P>编码比较困难一点,因为您不能盲目地把所有非字母数字的字元 (<CODE>\W</CODE>)都一律转换成十六进位的跳脱码。很重要的是有特殊意义的字元,如 <CODE>/</CODE> 和 <CODE>?</CODE> 便<EM>不可以</EM>转换。要做得正确,最简单的方法大概是使用现成的 URI::Escape模组,而不要重新发明轮子。这个模组是 libwww-perl 套件 (LWP)的一部分,可自 CPAN取得。<P><P><HR><H2><A NAME="_p_i_N_requests_j_V_t_">如何【将 requests】转向到另一页去?</A></H2>在您的回应中不要使用 <CODE>Content-Type</CODE>这个标头,相反地,用 <CODE>Location:</CODE> 这个标头。按正式规定,应当 <CODE>URL:</CODE> 才是正确的标头。因此 CGI.pm模组(可 由CPAN取得)两个标头都送:<P><PRE>    Location: <A HREF="../../tppmsgs/msgs1.htm#129" tppabs="http://www.domain.com/newpage">http://www.domain.com/newpage</A>    URI: <A HREF="../../tppmsgs/msgs1.htm#129" tppabs="http://www.domain.com/newpage">http://www.domain.com/newpage</A></PRE><P>要注意的是,由於 servers采用「最高效率化」的运作方式,故在这些标头中如 果使用相对式的 URLs可能会产生奇怪的後果。<P><P><HR><H2><A NAME="_p_W_K_X_H">如何替网页加上密码?</A></H2>不一定,要看情况。您需要读您 server的使用手册,或者查查看上头所列的几个FAQs。<P><P><HR><H2><A NAME="_n_Perl_s_htpasswd_">要怎麽用 Perl来编辑 .htpasswd和 .htgroup这两个档案?

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -