??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区电影在线观看,亚洲一区中文字幕在线观看,亚洲最大激情中文字幕http://www2.blogjava.net/jackstudio/category/12649.htmlzh-cnWed, 28 Feb 2007 19:49:44 GMTWed, 28 Feb 2007 19:49:44 GMT60字符串中的变量调?/title><link>http://www.tkk7.com/jackstudio/archive/2006/12/15/87964.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Fri, 15 Dec 2006 07:52:00 GMT</pubDate><guid>http://www.tkk7.com/jackstudio/archive/2006/12/15/87964.html</guid><wfw:comment>http://www.tkk7.com/jackstudio/comments/87964.html</wfw:comment><comments>http://www.tkk7.com/jackstudio/archive/2006/12/15/87964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jackstudio/comments/commentRss/87964.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jackstudio/services/trackbacks/87964.html</trackback:ping><description><![CDATA[[PHP][Basic]字符串中的变量调?<br />描述<br />单引P无法在单引号中调用到变量倹{?<br />双引P当用双引h者定界符指定字符串时Q其中的变量会被解析?<br />如果遇到元W号Q?Q,解析器会可能多地取得后面的字符以组成一个合法的变量名;如果xC指定名字的l束Q用花括h变量名括h?<br />复杂Q花括号{}Q语法可以在字符串中包含M在名字空间的|仅仅用和在字W串之外同样的方法写一个表辑ּQ然后用 { ?} 把它包含q来?<br />因ؓ不能转义“{”,花括可法仅?紧跟?{ 后面时被识别Q用“{\$”或者“\{$”来得到一个字面上的“{$”)?<br />花括可法同样也可以解析数组索引或者对象属性:对于数组索引Q右ҎP]Q标志着索引的结束。对象属性则和简单变量适用同样的规则?<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><?</span><span style="COLOR: #000000">php <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />* description: 字符串中的变量解析示例?br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />* @author Sandy Lee <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 单变量调用?/span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$fruit</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">apple</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">We have an $food</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=>We have an apple) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">We have some ${food}s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=>We have some apples) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">We have some {$food}s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=>We have some apples) <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />// 数组调用 </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$fruits</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">strawberry</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">red</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">banana</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">yellow</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">); <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is $fruits[banana].</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=>A banana is yellow.) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is {$fruits['banana']}.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=>A banana is yellow.) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is {$fruits[banana]}.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=>A banana is yellow.)        </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is $fruits['banana'].</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=> wrong!) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">  <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$arr</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)); <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">arr: {$arr['a']['a2']}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> arr: a-2) <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />// cȝ调用 </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> foo <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />{ <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$foo</span><span style="COLOR: #000000">; <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$arr</span><span style="COLOR: #000000">; <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> foo() <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    { <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #800080">$this</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">foo </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Foo</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">; <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #800080">$this</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)); <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    } <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />} <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$c</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> foo(); <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">foo: $c->foo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> foo: Foo) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">foo: {$c->foo}s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> foo: Foos) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">foo arr: {$c->arr['a']['a2']}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> foo arr: a-2) </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">?></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span></div><img src ="http://www.tkk7.com/jackstudio/aggbug/87964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jackstudio/" target="_blank">jackstudio</a> 2006-12-15 15:52 <a href="http://www.tkk7.com/jackstudio/archive/2006/12/15/87964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP截取中文字符ԌUTF-8、GBKhttp://www.tkk7.com/jackstudio/archive/2006/12/10/86638.htmljackstudiojackstudioSat, 09 Dec 2006 21:11:00 GMThttp://www.tkk7.com/jackstudio/archive/2006/12/10/86638.htmlhttp://www.tkk7.com/jackstudio/comments/86638.htmlhttp://www.tkk7.com/jackstudio/archive/2006/12/10/86638.html#Feedback0http://www.tkk7.com/jackstudio/comments/commentRss/86638.htmlhttp://www.tkk7.com/jackstudio/services/trackbacks/86638.html    $tmpstr = "";
    $strlen = $start + $len;
    for($i = 0; $i < $strlen; $i++) {
        if(ord(substr($str, $i, 1)) > 0xa0) {
            $tmpstr .= substr($str, $i, 2);
            $i++;
        } else
            $tmpstr .= substr($str, $i, 1);
    }
    return $tmpstr;
}

jackstudio 2006-12-10 05:11 发表评论
]]>
PHPq接MySQL出现q的一些个人看?/title><link>http://www.tkk7.com/jackstudio/archive/2006/12/10/86637.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Sat, 09 Dec 2006 21:08:00 GMT</pubDate><guid>http://www.tkk7.com/jackstudio/archive/2006/12/10/86637.html</guid><wfw:comment>http://www.tkk7.com/jackstudio/comments/86637.html</wfw:comment><comments>http://www.tkk7.com/jackstudio/archive/2006/12/10/86637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jackstudio/comments/commentRss/86637.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jackstudio/services/trackbacks/86637.html</trackback:ping><description><![CDATA[ <table height="30" cellspacing="0" cellpadding="0" width="98%" align="center" border="0"> <tbody> <tr> <td class="hjj22">转蝲Q?a >http://www.52net.com/html/2006/0428/63042.html</a><br />作者:不祥<br /><br /><br />PHPq接MySQL的过E中如果出现q很多Z_?Set names '??'"p解决问题Q但很多时候还是会出现各种怪现象,比如说页面能正常存取Q但是phpmyadmin不能正常存取{现象。小弟经q验证,产生了一些个人看法,Ƣ迎大家讨论和指正?br /><br />MySQL数据库操作过E中出现了三U字W集Q?br />1、页面字W集Q也是 content="TEXT/HTML; CHARSET=GBK"Q?br />2、连接字W集Q也是 "Set names 'GBK'"Q?br />3、字D字W集Q无论是库还是表的字W集Q将最l反映到字段上)<br />一、实验:<br />1、情况一<br />数据库字D字W集Qutf-8<br />q接字符集:没有昑ּ讄Q默认ؓlatin1<br />面字符集:gbk<br /><br />存入q程Q?br />1)面用GBK表示的SQL向服务器提交存入hQ?br />2)默认情况下(不用Set Names '??'Q服务器用latin1打开q接Q?br />3)服务器误认ؓ当前的SQL语句是用latin1表示的;<br />4)服务器将GBK字符当作latin1字符Q错误的q用“latin1转UTF-8函数”将字符转换后存入UTF-8字段中;<br />5)Q?错误的latin1(其实是GBK) => 错误的UTF-8Q?br />6)如果用phpmyadmin打开该表Q用utf8q接Q将会看到该字段Zؕ码;<br /><br />dq程Q?br />1)默认情况下(不用Set Names '??'Q服务器用latin1打开q接Q?br />2)服务器将UTF-8字段中的D{换ؓlatin1q回l客LQ?br />3)Q错误的UTF-8 => 错误的latin1(其实是GBK)Q该q程为存入过E?的逆过E。(刚好错错得对了)<br />4)服务器误认为是latin1的GBK~码按页面字W集正常昄Q?br /><br />用示意图来表C就是:<br /><br /><!--c1--><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   存入q程Q?br />   ----------------------<br />   面    q接     存储<br />   ----------------------<br />   GBK => latin1 => utf-8<br />          ---------------<br />   ------------- |<br />         |       +------- 该过E得到的utf-8是一串不知所云的qQ但MySQL固执的认串码为UTF-8<br />         |<br />         +------ MySQLGBK误认为是latin1<br /><br />   dq程Q?br />   ----------------------<br />   面    q接     存储<br />   ----------------------<br />   GBK <= latin1 <= utf-8<br />          ---------------<br />   ------------- |<br />         |       +------- 正是q串ql过逆过E{换回正确的GBK~码Q只是MySQL认ؓ是latin1而已<br />         |<br />         +------ MySQL误认ؓ是latin1的GBK~码传回了页面,刚好得到正确的编码?!--c2--></td></tr></tbody></table><span id="dvdtrbt" class="postcolor"><!--ec2-->2、情况二<br />数据库字D字W集Qutf-8<br />q接字符集:gbk<br />面字符集:gbk<br /><br />文字描述略?br /><br /><br />C意?<br /><br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   存入q程Q?br />   ----------------------<br />   面   q接   存储<br />   ----------------------<br />   GBK => GBK => utf-8<br />          ------------<br />   ------------- |<br />         |       +------- 该过E得到的utf-8是由GBK转换而来的,是正的utf-8~码<br />         |<br />         +------ 面字符集等于连接字W集QMySQL认ؓ面传递给它的是GBK~码Q它的想法正好符合事实?br /><br /><br />   dq程Q?br />   ----------------------<br />   面   q接   存储<br />   ----------------------<br />   GBK <= GBK <= utf-8<br />              ---------------<br />   ------------- |<br />         |       +------- 用“utf-8转GBK函数”将正确的utf-8~码转换回GBK<br />         |<br />         +------ 面字符集等于连接字W集Q显C没有Q何问题?!--c2--></td></tr></tbody></table><span id="xzztbzp" class="postcolor"><!--ec2--><br />3、情况三<br />数据库字D字W集Qgbk<br />q接字符集:没有昑ּ讄Q默认ؓlatin1<br />面字符集:gbk<br /><br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   存入q程Q?br />   ----------------------<br />   面   q接   存储<br />   ----------------------<br />   GBK => latin1 => GBK<br />          ------------<br />   ------------- |<br />         |       +------- 字符被“latin1转GBK函数”{换的成了qQ但MySQL认ؓ它是GBKQ所以工h法正常显C?br />         |<br />         +------ MySQL认ؓ面传递给它的是latin1~码Q它在后箋q程中画蛇添_正的GBK转换Zؕ码?br /><br /><br />   dq程Q?br />   ----------------------<br />   面   q接   存储<br />   ----------------------<br />   GBK <= latin1 <= GBK<br />          ---------------<br />   ------------- |<br />         |       +------- “GBK转latin1函数”将q转换为GBKQ但MySQL却认为它们是latin1<br />         |<br />         +------ 错误的latin1~码其实是正的GBK~码Q页面显C正常,但工hCZ正常?!--c2--></td></tr></tbody></table><span id="lpbrhjz" class="postcolor"><!--ec2--><br /><br />二、字W集之间的{?br />W者试着GBK字符误当作latin1转换为错误的utf-8能成功,逆过E中ؕ码{换回latin1得到的刚好是正确的GBK<br /><br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   $str = "中文试";<br />   $str_tran = iconv('latin1', 'utf-8', $str);<br />   echo $str_tran; // 昄qQ既不是GBK也不是utf-8和latin1<br /><br /><br />   echo "<br>-----------<br>";<br /><br /><br />   $str_re_tran = iconv('utf-8', 'latin1', $str_tran);<br />   echo $str_re_tran;  // 昄 “中文测试?!--c2--></td></tr></tbody></table><span id="xblxzzf" class="postcolor"><!--ec2--><br /><br />而将GBK字符误当作utf-8转换为错误的GBK~码则出现错?br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   $str = "中文试";<br />   #$str_tran = iconv('utf-8', 'gbk', $str);    // 错误Q!Q?!--c2--></td></tr></tbody></table><span id="ldhzvtb" class="postcolor"><!--ec2--><br /><br />可见一U编码是否能被当作另一U编码被转换为第三种~码Q取决于~码的固有属性,上面我们丄W一个例子只是碰巧GBK~码能被误当作latin1被{换ؓutf-8。如果是如下情况Q则数据库肯定不能正常存取数据?br />GBK => utf-8 => GBKQ未实验Q?br />三、结?br />面能正常存取但phpmyadmin不能正常存取Q从严格意义上来说应该是一U错误,面是否能正常存取取决于q接字符集是否能正常的被转换为存储字W集?br />要保证页面能正常存取Qƈ且工具也能正怋用,一般保持页面字W集{于或兼容连接字W集可以了?/span></td> </tr> </tbody> </table> <img src ="http://www.tkk7.com/jackstudio/aggbug/86637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jackstudio/" target="_blank">jackstudio</a> 2006-12-10 05:08 <a href="http://www.tkk7.com/jackstudio/archive/2006/12/10/86637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分页c?调用很简? ........http://www.tkk7.com/jackstudio/archive/2006/10/26/77425.htmljackstudiojackstudioThu, 26 Oct 2006 08:27:00 GMThttp://www.tkk7.com/jackstudio/archive/2006/10/26/77425.htmlhttp://www.tkk7.com/jackstudio/comments/77425.htmlhttp://www.tkk7.com/jackstudio/archive/2006/10/26/77425.html#Feedback0http://www.tkk7.com/jackstudio/comments/commentRss/77425.htmlhttp://www.tkk7.com/jackstudio/services/trackbacks/77425.html   1 < %    2 ...  阅读全文

jackstudio 2006-10-26 16:27 发表评论
]]>
smarty的程序设计部?/title><link>http://www.tkk7.com/jackstudio/archive/2006/09/05/67864.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Tue, 05 Sep 2006 10:14:00 GMT</pubDate><guid>http://www.tkk7.com/jackstudio/archive/2006/09/05/67864.html</guid><wfw:comment>http://www.tkk7.com/jackstudio/comments/67864.html</wfw:comment><comments>http://www.tkk7.com/jackstudio/archive/2006/09/05/67864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jackstudio/comments/commentRss/67864.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jackstudio/services/trackbacks/67864.html</trackback:ping><description><![CDATA[ <font color="#0000bb">smarty的程序设计部分:</font> <p> <font color="#0000bb">在smarty的模板设计部分我单的把smarty在模板中的一些常用设|做了简单的介绍Q这一节主要来介绍一下如何在smarty中开始我们程</font> </p> <p> <font color="#0000bb">序设计?/font> </p> <font color="#0000bb"> <p> <br />PHP代码: <br />    首先来介l一下在上一节中我们使用的过?php文g中的一些元素。同P我们拿上一节中最开始的那个index.php文g来说明一下: <br />     <br />   ================================================ <br />     index.php <br />   ================================================ <br />   <?php <br />     /********************************************* <br />      * <br />      * 文g名: index.php <br />      * 作?用: 昄实例E序 <br />      * <br />      * 作?者: 大师?<br />      * EmailQ?<a href="mailto:teacherli@163.com"><font color="#0066a7">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      include_once("./comm/Smarty.class.php"); //包含smartycL?</p> <p>      $smarty = new Smarty();  //建立smarty实例对象$smarty <br />      $smarty->templates("./templates"); //讄模板目录 <br />      $smarty->templates_c("./templates_c"); //讄~译目录 </p> <p> <br />      //****大家注意Q这里我是我新加入的****// <br />      $smarty->cache("./cache"); //讄~存目录 <br />      $smarty->cache_lifetime = 60 * 60 * 24;  //讄~存旉 <br />      $smarty->caching = true;      //讄~存方式 <br />       <br />      //---------------------------------------------------- <br />      //左右边界W,默认为{}Q但实际应用当中Ҏ与JavaScript <br />      //相冲H,所以徏议设?lt;{}>或其它?<br />      //---------------------------------------------------- <br />      $smarty->left_delimiter = "<{"; <br />      $smarty->right_delimiter = "}>"; </p> <p>      $smarty->assign("name", "李晓?); //q行模板变量替换 <br />       <br />      //~译q显CZ?/templates下的index.tpl模板 <br />      $smarty->display("index.tpl"); <br />   ?> <br />        <br />       我们可以看到Qsmarty的程序部分实际就是符合php语言规范的一l代码,我们依次来解释一下: <br />         1?**/语句Q?<br />            包含的部分ؓE序头注释。主要的内容应该为对E序的作用,版权与作者及~写旉做一个简单的介绍Q这在smarty中不是必 </p> <p>需的,但从E序的风格来Ԍq是一个好的风根{?<br />     <br />     2。include_once语句Q?<br />        它将安装到网站的smarty文g包含到当前文件中Q注意包含的路径一定要写正?</p> <p>     3?smarty = new Smarty(): <br />        q一句新Z个Smarty对象$smarty,单的一个对象的实例化?</p> <p>     4?smarty->templates(""): <br />            q一句指?smarty对象使用tpl模板时的路径Q它是一个目录,在没有这一句时QSmarty默认的模板\径ؓ当前目录的templates </p> <p>目录Q实际在写程序时Q我们要这一句写明,q也是一U好的程序风根{?<br />     5?smarty->templates_c(""): <br />        q一句指?smarty对象q行~译时的目录。在模板设计我们已l知道Smarty是一U编译型模板语言Q而这个目录,是它编?</p> <p>模板的目录,q里要注意,如果站点位于*nix服务器上Q请保teamplates_c里定义的q个目录h可写可读权限Q默认情况下它的~译目录 </p> <p>是当前目录下的templates_cQ出于同L理由我们其明确的写出来?<br />    <br />         6?smarty->left_delimiter?smarty->right_delimiter: <br />        指明在查找模板变量时的左叛_割符。默认情况下?{"?}"Q但在实际中因ؓ我们要在模板中?lt;script>,Script中的函数?</p> <p>义难免会使用{}Q虽然它有自q解决办法Q但习惯上我们将它重新定义ؓ"<{"?}>"或是"<!--{"?}-->"或其它标志符Q注意,如果在这?</p> <p>定义了左叛_割符后,在模板文件中相应的要使每一个变量用与定义相同的符P例如在这里指定ؓ"<{"?}>"Qtpl模板中也要相应的?</p> <p>{$name}变成<{$name}>,q样E序才可以正的扑ֈ模板变量?<br />     </p> <p>     7?smarty->cache("./cache"): <br />        告诉Smarty输出的模板文件缓存的位置。上一我们知道Smarty最大的优点在于它可以缓存,q里是讄~存的目录。默认情 </p> <p>况下为当前目录下的cache目录Q与templates_c目录相当Q在*nixpȝ中我们要保它的可读可写性?<br />     <br />     8. $smarty->cache_lifetime = 60 * 60 * 24: <br />         <br />        q里以Uؓ单位q行计算~存有效的时间。第一ơ缓存时间到期时当Smarty的caching变量讄为true时缓存将被重建。当它的 </p> <p>取gؓ-1时表C徏立v的缓存从不过期,?时表C在E序每次执行时缓存L被重新徏立。上面的讄表示cache_lifetime讄Z天?</p> <p>     9. $smarty->caching = 1: <br />        q个属性告诉Smarty是否要进行缓存以及缓存的方式。它可以?个|0QSmarty默认|表示不对模板q行~存Q?Q表C?</p> <p>Smarty用当前定义的cache_lifetime来决定是否结束cacheQ?Q表CSmarty用在cache被徏立时使用cache_lifetimeq个倹{习惯上?</p> <p>用true与false来表C是否进行缓存?</p> <p>     10. $smarty->assign("name", "李晓?)Q?<br />        该数的原型ؓassign(string varname, mixed var),varname为模板中使用的模板变量,var指出要将模板变量替换的变量名Q其 </p> <p>W二U原形ؓassign(mixed var),我们要在后面的例子详l的讲解q个成员函数的用方法,assign是Smarty的核心函C一Q所有对模板?</p> <p>量的替换都要使用它?</p> <p>     11. $smarty->display("index.tpl"): <br />         该函数原形ؓdisplay(string varname),作用为显CZ个模ѝ简单的Ԍ它将分析处理q的模板昄出来Q这里的模板文g?</p> <p>用加路径Q只要用一个文件名可以了Q它路径我们已经?smarty->templates(string path)中定义过了?</p> <p>       E序执行完后我们可以打开当前目录下的templates_c与cache目录Q就会发现在下边多出一?%的目录,q些目录是Smarty的编译与 </p> <p>~存目录Q它q序自动生成,不要直接对这些生成的文gq行修改?<br />       以上我简单的把SmartyE序中的一些常用的基本元素介绍了一下,在后边的例子中你可以看到它们将被多ơ的使用?<br />     <br />     <br />    接下来介l一个section循环块与foreach循环块,本来它应该属于模杉K分,但是׃它们是smarty的精华所在,而且与smartyE序设计 </p> <p>部分联系非常紧密Q所以就在本节单独拿出来讲一下?</p> <p>   1. foreachQ用于@环简单数l,它是一个选择性的section循环Q它的定义格式ؓ: <br />     <br />    {foreach from=$array item=array_id} <br />    {foreachelse} <br />    {/foreach} <br />    其中Qfrom 指出要@环的数组变量Qitem循环的变量名Uͼ循环ơ数由from所指定的数l变量的个数所军_。{foreachelse}用来?</p> <p>E序中传递过来的数组为空时的处理Q下面是一个简单的例子Q?<br />  =========================================== <br />    example6.tpl <br />  =========================================== <br />  <html> <br />    <head><title>q是一个foreach使用的例?lt;/title></head> <br />    <body> <br />       q里输Z个数l:<br> <br />       {foreach from=$newsArray item=newsID} <br />         新闻~号Q{$newsID}<br> <br />     新闻内容Q{$newsTitle}<br><hr> <br />       {foreachelse} <br />         对不P数据库中没有新闻输出Q?<br />       {/foreach} <br />    </body> <br />  </html> </p> <p>  ========================================== <br />  example6.php <br />  ========================================== <br />六。smarty的程序设计部分:</p> <p>在smarty的模板设计部分我单的把smarty在模板中的一些常用设|做了简单的介绍Q这一节主要来介绍一下如何在smarty中开始我们程</p> <p>序设计?/p> <p> <br />PHP代码: <br />    首先来介l一下在上一节中我们使用的过?php文g中的一些元素。同P我们拿上一节中最开始的那个index.php文g来说明一下: <br />     <br />   ================================================ <br />     index.php <br />   ================================================ <br />   <?php <br />     /********************************************* <br />      * <br />      * 文g名: index.php <br />      * 作?用: 昄实例E序 <br />      * <br />      * 作?者: 大师?<br />      * EmailQ?<a href="mailto:teacherli@163.com"><font color="#0066a7">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      include_once("./comm/Smarty.class.php"); //包含smartycL?</p> <p>      $smarty = new Smarty();  //建立smarty实例对象$smarty <br />      $smarty->templates("./templates"); //讄模板目录 <br />      $smarty->templates_c("./templates_c"); //讄~译目录 </p> <p> <br />      //****大家注意Q这里我是我新加入的****// <br />      $smarty->cache("./cache"); //讄~存目录 <br />      $smarty->cache_lifetime = 60 * 60 * 24;  //讄~存旉 <br />      $smarty->caching = true;      //讄~存方式 <br />       <br />      //---------------------------------------------------- <br />      //左右边界W,默认为{}Q但实际应用当中Ҏ与JavaScript <br />      //相冲H,所以徏议设?lt;{}>或其它?<br />      //---------------------------------------------------- <br />      $smarty->left_delimiter = "<{"; <br />      $smarty->right_delimiter = "}>"; </p> <p>      $smarty->assign("name", "李晓?); //q行模板变量替换 <br />       <br />      //~译q显CZ?/templates下的index.tpl模板 <br />      $smarty->display("index.tpl"); <br />   ?> <br />        <br />       我们可以看到Qsmarty的程序部分实际就是符合php语言规范的一l代码,我们依次来解释一下: <br />         1?**/语句Q?<br />            包含的部分ؓE序头注释。主要的内容应该为对E序的作用,版权与作者及~写旉做一个简单的介绍Q这在smarty中不是必 </p> <p>需的,但从E序的风格来Ԍq是一个好的风根{?<br />     <br />     2。include_once语句Q?<br />        它将安装到网站的smarty文g包含到当前文件中Q注意包含的路径一定要写正?</p> <p>     3?smarty = new Smarty(): <br />        q一句新Z个Smarty对象$smarty,单的一个对象的实例化?</p> <p>     4?smarty->templates(""): <br />            q一句指?smarty对象使用tpl模板时的路径Q它是一个目录,在没有这一句时QSmarty默认的模板\径ؓ当前目录的templates </p> <p>目录Q实际在写程序时Q我们要这一句写明,q也是一U好的程序风根{?<br />     5?smarty->templates_c(""): <br />        q一句指?smarty对象q行~译时的目录。在模板设计我们已l知道Smarty是一U编译型模板语言Q而这个目录,是它编?</p> <p>模板的目录,q里要注意,如果站点位于*nix服务器上Q请保teamplates_c里定义的q个目录h可写可读权限Q默认情况下它的~译目录 </p> <p>是当前目录下的templates_cQ出于同L理由我们其明确的写出来?<br />    <br />         6?smarty->left_delimiter?smarty->right_delimiter: <br />        指明在查找模板变量时的左叛_割符。默认情况下?{"?}"Q但在实际中因ؓ我们要在模板中?lt;script>,Script中的函数?</p> <p>义难免会使用{}Q虽然它有自q解决办法Q但习惯上我们将它重新定义ؓ"<{"?}>"或是"<!--{"?}-->"或其它标志符Q注意,如果在这?</p> <p>定义了左叛_割符后,在模板文件中相应的要使每一个变量用与定义相同的符P例如在这里指定ؓ"<{"?}>"Qtpl模板中也要相应的?</p> <p>{$name}变成<{$name}>,q样E序才可以正的扑ֈ模板变量?<br />     </p> <p>     7?smarty->cache("./cache"): <br />        告诉Smarty输出的模板文件缓存的位置。上一我们知道Smarty最大的优点在于它可以缓存,q里是讄~存的目录。默认情 </p> <p>况下为当前目录下的cache目录Q与templates_c目录相当Q在*nixpȝ中我们要保它的可读可写性?<br />     <br />     8. $smarty->cache_lifetime = 60 * 60 * 24: <br />         <br />        q里以Uؓ单位q行计算~存有效的时间。第一ơ缓存时间到期时当Smarty的caching变量讄为true时缓存将被重建。当它的 </p> <p>取gؓ-1时表C徏立v的缓存从不过期,?时表C在E序每次执行时缓存L被重新徏立。上面的讄表示cache_lifetime讄Z天?</p> <p>     9. $smarty->caching = 1: <br />        q个属性告诉Smarty是否要进行缓存以及缓存的方式。它可以?个|0QSmarty默认|表示不对模板q行~存Q?Q表C?</p> <p>Smarty用当前定义的cache_lifetime来决定是否结束cacheQ?Q表CSmarty用在cache被徏立时使用cache_lifetimeq个倹{习惯上?</p> <p>用true与false来表C是否进行缓存?</p> <p>     10. $smarty->assign("name", "李晓?)Q?<br />        该数的原型ؓassign(string varname, mixed var),varname为模板中使用的模板变量,var指出要将模板变量替换的变量名Q其 </p> <p>W二U原形ؓassign(mixed var),我们要在后面的例子详l的讲解q个成员函数的用方法,assign是Smarty的核心函C一Q所有对模板?</p> <p>量的替换都要使用它?</p> <p>     11. $smarty->display("index.tpl"): <br />         该函数原形ؓdisplay(string varname),作用为显CZ个模ѝ简单的Ԍ它将分析处理q的模板昄出来Q这里的模板文g?</p> <p>用加路径Q只要用一个文件名可以了Q它路径我们已经?smarty->templates(string path)中定义过了?</p> <p>       E序执行完后我们可以打开当前目录下的templates_c与cache目录Q就会发现在下边多出一?%的目录,q些目录是Smarty的编译与 </p> <p>~存目录Q它q序自动生成,不要直接对这些生成的文gq行修改?<br />       以上我简单的把SmartyE序中的一些常用的基本元素介绍了一下,在后边的例子中你可以看到它们将被多ơ的使用?<br />     <br />     <br />    接下来介l一个section循环块与foreach循环块,本来它应该属于模杉K分,但是׃它们是smarty的精华所在,而且与smartyE序设计 </p> <p>部分联系非常紧密Q所以就在本节单独拿出来讲一下?</p> <p>   1. foreachQ用于@环简单数l,它是一个选择性的section循环Q它的定义格式ؓ: <br />     <br />    {foreach from=$array item=array_id} <br />    {foreachelse} <br />    {/foreach} <br />    其中Qfrom 指出要@环的数组变量Qitem循环的变量名Uͼ循环ơ数由from所指定的数l变量的个数所军_。{foreachelse}用来?</p> <p>E序中传递过来的数组为空时的处理Q下面是一个简单的例子Q?<br />  =========================================== <br />    example6.tpl <br />  =========================================== <br />  <html> <br />    <head><title>q是一个foreach使用的例?lt;/title></head> <br />    <body> <br />       q里输Z个数l:<br> <br />       {foreach from=$newsArray item=newsID} <br />         新闻~号Q{$newsID}<br> <br />     新闻内容Q{$newsTitle}<br><hr> <br />       {foreachelse} <br />         对不P数据库中没有新闻输出Q?<br />       {/foreach} <br />    </body> <br />  </html> </p> <p>  ========================================== <br />  example6.php <br />  ========================================== </p> <p>  <?php <br /><br />     </p> </font> <font color="#ff8000">/********************************************* <br />      * <br />      * 文g名: example6.php <br />      * 作  用Q?昄实例E序2 <br />      * <br />      * 作  者: 大师?<br />      * EmailQ ?a href="mailto:teacherli@163.com"><font color="#000080">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      </font> <font color="#007700">include_once(</font> <font color="#dd0000">"./comm/Smarty.class.php"</font> <font color="#007700">); <br /><br />      </font> <font color="#0000bb">$smarty </font> <font color="#007700">= new </font> <font color="#0000bb">Smarty</font> <font color="#007700">();   <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">templates</font> <font color="#007700">(</font> <font color="#dd0000">"./templates"</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">templates_c</font> <font color="#007700">(</font> <font color="#dd0000">"./templates_c"</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">cache</font> <font color="#007700">(</font> <font color="#dd0000">"./cache"</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">cache_lifetime  </font> <font color="#007700">= </font> <font color="#0000bb">0</font> <font color="#007700">; <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">caching         </font> <font color="#007700">= </font> <font color="#0000bb">true</font> <font color="#007700">; <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">left_delimiter  </font> <font color="#007700">= </font> <font color="#dd0000">"{"</font> <font color="#007700">; <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">right_delimiter </font> <font color="#007700">= </font> <font color="#dd0000">"}"</font> <font color="#007700">; <br />       <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">1</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"W?条新?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">2</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"W?条新?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">3</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"W?条新?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">4</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"W?条新?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">5</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"W?条新?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">6</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"W?条新?</font> <font color="#007700">); <br /><br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">assign</font> <font color="#007700">(</font> <font color="#dd0000">"newsArray"</font> <font color="#007700">, </font> <font color="#0000bb">$array</font> <font color="#007700">); <br /><br />      </font> <font color="#ff8000">//~译q显CZ?/templates下的index.tpl模板 <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">display</font> <font color="#007700">(</font> <font color="#dd0000">"example6.tpl"</font> <font color="#007700">); <br />   </font> <font color="#0000bb">?> <br />   ================================================= <br />   example6.php 输出文g <br />   ================================================= <br />   <html> <br />     <head><title>foreach使用的例?lt;/title></head> <br />     <body> <br />        q里输Z个数l:<br> </font> <blockquote> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第1条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第2条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第3条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第4条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第5条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第6条新?lt;br><hr> <br />     </body> <br />   </html> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   foreachq可以用foreachelse来匹配,用foreachelse来表C当传递给foreach的数lؓI值时E序要执行的操作Q具体的使用ҎQ请参?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">手册的说明?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   2. section: <br />     section的生是决foreach的不的Q与foreach一P它用于设计模板内的@环块Q它较ؓ复杂Q可极大E序上满程序需要,所 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">以在E序中我习惯使用它而不使用foreach,基本原Ş为: </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">     {section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]} </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">     name: section的名Uͼ不用? <br />     $loop: 要@环的变量Q在E序中要使用assign对这个变量进行操作?<br />     $start: 开始@环的下标Q@环下标默认由0开?<br />     $step:  每次循环时下标的增数 <br />     $max:   最大@环下?<br />     $show:  booleancdQ决定是否对q个块进行显C,默认为true </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">     q里有个名词需要说明: <br />         循环下标Q实际它的英文名UCؓindexQ是索引的意思,q里我将它译?下标"Q主要是Z好理解。它表示在显C个@环块时当 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">前的循环索引Q默认从0开始,?start的媄响,如果?start设ؓ5Q它也将?开始计敎ͼ在模板设计部分我们用过它,q是当前 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">{section}的一个属性,调用方式为Smarty.section.sectionName.index,q里的sectionName指的是函数原型中的name属性?<br />    {section}块具有的属性|分别为: <br />      1. index:      上边我们介绍?循环下标"Q默认ؓ0 <br />      2. index_prev: 当前下标的前一个|默认?1 <br />      3. index_next: 当前下标的下一个|默认? <br />      4. first:      是否为第一下@?<br />      5. last:       是否为最后一个@?<br />      6. iteration:  循环ơ数 <br />      7. rownum:     当前的行Piteration的另一个别?<br />      8. loop:       最后一个@环号Q可用在section块后l计section的@环次?<br />      9. total: 循环ơ数Q可用在section块后l计循环ơ数 <br />      10. show: 在函数的声明中有它,用于判断section是否昄 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      它们的具体属性大家可以参考手册,在程序中可灵zM用它的这些属性,模板部分我就使用qindex属性,大家可以回过头去看看?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      同样Q{section}也可以配合用{sectionelse}Q用来表CZ入的数组变量为空时对模板q行的处理?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      我们把上边的那个例子使用{section}来替代{foreach}来实现现L功能Q注意,在这个例子中我只tpl模板中的{foreach}?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">{section}来实玎ͼphpE序文g中没有Q何改动,同时加了{sectionelse}处理块: </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">  =========================================== <br />    example7.tpl <br />  =========================================== <br />  <html> <br />    <head><title>q是一个foreach使用的例?lt;/title></head> <br />    <body> <br />       q里输Z个数l:<br> <br />       {section name=loop, loop=$News} <br />         新闻~号Q{$News[loop].newsID}<br> <br />         新闻标题Q{$News[loop].newsTitle}<br><hr> <br />       {sectionelse} <br />         对不P没有M新闻输入Q?<br />       {/section} <br />    </body> <br />  </html> <br />   <br />  ========================================== <br />  example6.php <br />  ========================================== <br />  <?php <br />     /********************************************* <br />      * <br />      * 文g名: example7.php <br />      * 作?用: 昄实例E序2 <br />      * <br />      * 作?者: 大师?<br />      * EmailQ?<a href="mailto:teacherli@163.com"><font color="#0066a7">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      include_once("./comm/Smarty.class.php"); </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      $smarty = new Smarty();   <br />      $smarty->templates("./templates"); <br />      $smarty->templates_c("./templates_c"); <br />      $smarty->cache("./cache"); <br />      $smarty->cache_lifetime  = 0; <br />      $smarty->caching         = true; <br />      $smarty->left_delimiter  = "{"; <br />      $smarty->right_delimiter = "}"; <br />       <br />      $array[] = array("newsID"=>1, "newsTitle"=>"W?条新?); <br />      $array[] = array("newsID"=>2, "newsTitle"=>"W?条新?); <br />      $array[] = array("newsID"=>3, "newsTitle"=>"W?条新?); <br />      $array[] = array("newsID"=>4, "newsTitle"=>"W?条新?); <br />      $array[] = array("newsID"=>5, "newsTitle"=>"W?条新?); <br />      $array[] = array("newsID"=>6, "newsTitle"=>"W?条新?); </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      $smarty->assign("newsArray", $array); </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      //~译q显CZ?/templates下的index.tpl模板 <br />      $smarty->display("example6.tpl"); <br />   ?> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   ================================================= <br />   example7.php 输出文g <br />   ================================================= <br />   <html> <br />     <head><title>foreach使用的例?lt;/title></head> <br />     <body> <br />        q里输Z个数l:<br> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第1条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第2条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第3条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第4条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第5条新?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    新闻~号Q?<br> <br />    新闻内容Q第6条新?lt;br><hr> <br />     </body> <br />   </html> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   q里的{section}块的对于变量的命名方式感觉有些别扭,不过没关p,你只要记住模板变量用: <br />   $loopName[name].varq种模式p了,loopName为loop处赋予的变量名,[name]为name处赋予的字符Ԍ.后ؓZ要在E序数组中设定要 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">与值相对应的下标名U就行了?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   <br />   好了Qsmarty学习指南---E序设计就写到q里Q对于一般的应用Q这些知识已l够用了Q其它的一些高U技巧大家请参看手册中的例子 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">Q下一节将讲讲Smarty在实际应用中的例子,分别以php内置的mysql语句Qphplib中的DBc,ADODBQPear中DBcL分别讲一下各个类库在同一个例子中的实现?<br /></font> </font> </p> </blockquote> <img src ="http://www.tkk7.com/jackstudio/aggbug/67864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jackstudio/" target="_blank">jackstudio</a> 2006-09-05 18:14 <a href="http://www.tkk7.com/jackstudio/archive/2006/09/05/67864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>smartyQPHP模板引擎 http://www.tkk7.com/jackstudio/archive/2006/09/05/67860.htmljackstudiojackstudioTue, 05 Sep 2006 09:48:00 GMThttp://www.tkk7.com/jackstudio/archive/2006/09/05/67860.htmlhttp://www.tkk7.com/jackstudio/comments/67860.htmlhttp://www.tkk7.com/jackstudio/archive/2006/09/05/67860.html#Feedback0http://www.tkk7.com/jackstudio/comments/commentRss/67860.htmlhttp://www.tkk7.com/jackstudio/services/trackbacks/67860.html smartyQPHP模板引擎


一、什么是smarty?
 smarty是一个用PHP写出来的模板PHP模板引擎Q它提供了逻辑与外在内容的分离Q简单的Ԍ目的是要用PHPE序员同工?
?使用的程序员改变E序的逻辑内容不会影响到美工的面设计Q美工重C攚w面不会媄响到E序的程序逻辑Q这在多人合作的目
中显的尤为重要?

二、smarty优点Q?
 ?. 速度Q采用smarty~写的程序可以获得最大速度的提高,q一Ҏ相对于其它的模板引擎技术而言的?
 ?
 ?. ~译型:采用smarty~写的程序在q行时要~译成一个非模板技术的PHP文gQ这个文仉用了PHP与HTML混合的方式,在下一ơ访
问模板时WEBh直接转换到这个文件中Q而不再进行模杉K新编译(在源E序没有改动的情况下Q?
 
 ?. ~存技术:smarty选用的一U缓存技术,它可以将用户最l看到的HTML文g~存成一个静态的HTML,当设定smarty的cache属性ؓ
  trueӞ在smarty讑֮的cachetime期内用LWEBh直接转换到这个静态的HTML文g中来Q这相当于调用一个静态的HTML文g?

 ?. 插g技术:smarty可以自定义插件。插件实际就是一些自定义的函数?
 ?
 ?. 模板中可以用if/elseif/else/endif。在模板文g使用判断语句可以非常方便的对模板q行格式重排?


三、不适合使用smarty的地方:
 
 ?. 需要实时更新的内容。例如像股票昄Q它需要经常对数据q行更新Q这cd的程序用smartyq而会使模板处理速度变慢?
 
 ?. 项目。小目因ؓ目单而美工与E序员兼于一人的目Q用smartyq而会丧失php开发迅速的优点?

四、安装smartyc:
 ?
 安装smarty的环境:php版本4.06以上版本?

 安装smartyҎ非常单,从http://samrty.php.net中下载smarty.tar.gz,解压后找到LIB目录,在当前站点中建立目录comm,LIB中所有文?
  拷入comm目录,完成基本安装.
 ?
 其它高U安装用方法请看手?

五、smarty在模板中的用:
 ?
 ?本节通过几个实例来讲一讲smarty的用。smarty模板通常使用.tpl来标识,有些Zؓ了美工方便,扩展名直接写成.htmlQ也是可?
的。本文中采用smarty标准写法:?tpl来表CZؓ一个smarty模板?

 实?Q?

 ?先来看一个简单的例子?
 ?=====================================================
 ?index.tpl
 ?=====================================================
 ?
 ?{* 昄是smarty变量识符里的?包含的文字ؓ注释内容 *}
 ?{include file="header.tpl"}{*面?}
 大家好,我叫{$name}, Ƣ迎大家阅读我的smarty学习材料?
 ?{include file="foot.tpl"}{*面?}?

 上边的q个例子是一个tpl模板Q其中:
 ?. {**}是模杉K的注释,它在smartyҎ板进行解析时不进行Q何输出,仅供模板设计师对模板q行注释?
 ?. {include file="xxx.tpl"}使用此句一个模板文件包含到当前面中,例子中将在网站中公用事的head.tpl与foot.tplq行了包含,你可?
 这hQ用这一句将xxx.tpl中的内容全部复制在当前语句处。当Ӟ你不使用q一句也可以Q将XXX.tpl中的内容复制到当前语句处
  也是完全可以了?

 ?.{$name}: 模板变量Qsmarty中的核心l成Q采用smarty定义的左边界W{与右边界W}包含着、以PHP变量形式l出Q在smartyE序中将使用
 $smarty->assign("name", "李晓?)Q将模板中的$name替换成“李晓军”三个字?
 ?
  整个实例源程序如下:
  =============================
  header.tpl
  =============================
  <html>
 ?<head>
 ?lt;title>大师兄smarty教程</title>
 ?</head>
  <body>
 

  ===============================
  foot.tpl
  ===============================
 ?<hr>
 <center> CopyRight(C) by 大师?2004q??Email: teacherli@163.com </center>
 ?<hr>
 ?</body>
  </html>

 ?=====================================================
 ?index.tpl
 ?=====================================================
 ?
 ?{* 昄是smarty变量识符里的?包含的文字ؓ注释内容 *}
 ?{include file="header.tpl"}{*面?}
 大家好,我叫{$name}, Ƣ迎大家阅读我的smarty学习材料?
 ?{include file="foot.tpl"}{*面?}?

 ?===============================================
 index.php
 ?===============================================
 ?lt;?php
 /*********************************************
  *
  * 文g名: index.php
  * 作用: 昄实例E序
  *
  * 作者: 大师?
  * EmailQteacherli@163.com
  *
  *********************************************/
  include_once("./comm/Smarty.class.php"); //包含smartycL?

  $smarty = new Smarty();?/建立smarty实例对象$smarty
  $smarty->templates("./templates"); //讄模板目录
  $smarty->templates_c("./templates_c"); //讄~译目录
 
  //----------------------------------------------------
  //左右边界W,默认为{}Q但实际应用当中Ҏ与JavaScript
  //相冲H,所以徏议设?lt;{}>或其它?
  //----------------------------------------------------
  $smarty->left_delimiter = "{";
  $smarty->right_delimiter = "}";

  $smarty->assign("name", "李晓?); //q行模板变量替换
 
  //~译q显CZ?/templates下的index.tpl模板
  $smarty->display("index.tpl");
 ?>
 ?
 最l执行这个程序时显CZؓQ?
 ?===============================
 执行index.php
 ?===============================
 ?lt;html>
 ?<head>
 ?lt;title>大师兄smarty教程</title>
 ?</head>
 ?<body>
 大家好,我叫李晓? Ƣ迎大家阅读我的smarty学习材料?
 <hr>
 <center> CopyRight(C) by 大师?2004q??Email: teacherli@163.com </center>
 ?<hr>
 ?</body>
  </html>



实例2Q?
 ?q个例子是综合用smarty模板参数的一个例子,q些参数用来控制模板的输出,我只选其中几个,其它的参Cȝ参考吧?

 ?================================================
  exmple2.tpl
 ?================================================
 ?<html>
  <head><title>大师兄smartyCZ2</title></head>
  <body>
 ?1. W一句首字母要大写:{$str1|capitalize}<br>
 ?2. W二句模板变?+ 李晓军:{$str2|cat:"李晓?}<br>
 ?3. W三句输出当前日期:{$str3|date_format:"%Yq?m?d?}
 ?4. W四?phpE序中不处理Q它昄默认|{$str4|default:"没有|"}
 ?5。第五句要让它羃q?个空白字母位Qƈ使用"*"取替q?个空白字W:<br>
 {$str5|indent:8:"*"}}<br>
 ?6. W六句把TEACHerLI@163.com全部变ؓ写Q{$str6|lower}<br>
 ?7. W七句把变量中的teacherli替换成:李晓军:{$str7|replace:"teacherli":"李晓?}<br>
8. W八句ؓl合使用变量修改器:{$str8|capitalize|cat:"q里是新加的旉Q?|date_format:"%Yq?m?d?|lower}
  </body>
 ?</html>

 ?===============================================
 ?example2 .php
 ?===============================================
 ?<?php
 /*********************************************
  *
  * 文g名: example2.php
  * 作用: 昄实例E序2
  *
  * 作者: 大师?
  * EmailQteacherli@163.com
  *
  *********************************************/
  include_once("./Smarty.class.php"); //包含smartycL?

  $smarty = new Smarty();?/建立smarty实例对象$smarty
  $smarty->templates("./templates"); //讄模板目录
  $smarty->templates_c("./templates_c"); //讄~译目录
 
  //----------------------------------------------------
  //左右边界W,默认为{}Q但实际应用当中Ҏ与JavaScript
  //相冲H,所以徏议设?lt;{}>或其它?
  //----------------------------------------------------
  $smarty->left_delimiter = "{";
  $smarty->right_delimiter = "}";

  $smarty->assign("str1", "my name is xiao jun, li."); //str1替换成My Name Is Xiao Jun, Li.
  $smarty->assign("str2", "我的名字叫:"); //输出: 我的名字?李晓?
  $smarty->assign("str3", "公元"); //输出公元2004q??1日(我的当前旉Q?
  //$smarty->assign("str4", ""); //W四句不处理时会昄默认|如果使用前面q一句则替换?"
  $smarty->assign("str5", "前边8?"); //W五句输出:********前边8?
  $smarty->assign("str6", "TEACHerLI@163.com"); //q里输出teacherli@163.com
  $smarty->assign("str7", "this is teacherli"); //在模板中昄为:this is 李晓?
  $smarty->assign("str8", "HERE IS COMBINING:");

  //~译q显CZ?/templates下的index.tpl模板
  $smarty->display("example2.tpl");
 ?>
 ?
 ?最l输出效果:
 ?======================================================
 ?example2.php输出效果Q?
 ?======================================================
 ?<html>
  <head><title>大师兄smartyCZ2</title></head>
  <body>
 ?1. W一句首字母要大写:My Name Is Xiao Jun, Li.<br>
 ?2. W二句模板变?+ 李晓军:我的名字叫:李晓?lt;br>
 ?3. W三句输出当前日期:公元2004q??1?lt;br>
 ?4. W四?phpE序中不处理Q它昄默认|没有|<br>
 ?5。第五句要让它羃q?个空白字母位Qƈ使用"*"取替q?个空白字W:<br>
 ********前边8?<br>
 ?6. W六句把TEACHerLI@163.com全部变ؓ写Qteacherli@163.com<br>
 ?7. W七句把变量中的teacherli替换成:李晓军:this is 李晓?lt;br>
8. W八句ؓl合使用变量修改器:Here is Combining:q里是新加的旉Q?004q??1?
  </body>
 ?</html>

 在模板中的q些参数被称为变量修改器Qvariable modifiersQ,使用q些参数可对模板q行一pd的修Ҏ制。变量修改器
 ?|"和调节器名称应用修改器, 使用":"分开修改器参数。变量修改器可以l合使用Q像W八句一P实际使用中可以灵zd用?


jackstudio 2006-09-05 17:48 发表评论
]]>
php常见问题http://www.tkk7.com/jackstudio/archive/2006/08/10/62766.htmljackstudiojackstudioThu, 10 Aug 2006 04:19:00 GMThttp://www.tkk7.com/jackstudio/archive/2006/08/10/62766.htmlhttp://www.tkk7.com/jackstudio/comments/62766.htmlhttp://www.tkk7.com/jackstudio/archive/2006/08/10/62766.html#Feedback0http://www.tkk7.com/jackstudio/comments/commentRss/62766.htmlhttp://www.tkk7.com/jackstudio/services/trackbacks/62766.html1:Z么我得不到变?/p>

  我在一|页向另一|页POST数据nameQؓ什么输?name时却得不CQ何?

在PHP4.2以后的版本中register_global默认为off
  若想取得从另一面提交的变?

  Ҏ一:在PHP.ini中找到register_globalQƈ把它讄为on.
  Ҏ?在接收网|前面放上q个extract($_POST);extract($_GET);(注意extract($_SESSION)前必要有Session_Start()).
  Ҏ?一个一个读取变?a=$_GET["a"];$b=$_POST["b"]{,q种Ҏ虽然ȝQ但比较安全.

  2Q调试你的程?/p>

  在运行时必须知道某个变量Z倹{我是这样做的,建立一文gdebug.php,其内容如?

  PHP代码:

  <?PHP
  Ob_Start();
  Session_Start();
  Echo "<pre>";

  Echo "本页得到的_GET变量?";
  Print_R($_GET);

  Echo "本页得到的_POST变量?";
  Print_R($_POST);

  Echo "本页得到的_COOKIE变量?";
  Print_R($_COOKIE);

  Echo "本页得到的_SESSION变量?";
  Print_R($_SESSION);

  Echo "</pre>";
  ?>

  然后在php.ini中设|:include_path = "c:/php"Qƈdebug.php攑֜此文件夹,以后可以在每个|页里包含此文gQ查看得到的变量名和?

  3Q如何用session

  凡是与session有关?之前必须调用函数session_start();

  为session付值很??

  PHP代码:

  <?php
  Session_start();
  $Name = "q是一个Session例子";
  Session_Register("Name");//注意,不要写成QSession_Register("$Name");
  Echo $_SESSION["Name"];
  //之后$_SESSION["Name"]?q是一个Session例子"
  ?>

  在php4.2之后,可以为session直接付?

  PHP代码:

  <?PHP
  Session_Start();
  $_SESSION["name"]="value";
  ?>

  取消session可以q样:


PHP代码:


  <?php
  session_start();
  session_unset();
  session_destroy();
  ?>

  取消某个session变量在php4.2以上q有BUG.

  注意:

  1:在调用Session_Start()之前不能有Q何输?例如下面是错误的.
  ==========================================
  1?br />  2?3?Session_Start();//之前在第一行已l有输出
  4?.....
  5??>
  ==========================================

  提示1:

  凡是出现" ........headers already sent.......... ",是Session_Start()之前向浏览器输出信息.L输出正?QCOOKIE也会出现q种错误,错误原因一P

  提示2:

  如果你的Session_Start()攑֜循环语句?q且很难定之前哪里向浏览器输出信息,可以用下面这U方?
  1?<?PHP Ob_Start(); ?>
  ........q里是你的程?.....

  2:q是什么错?/p>

  Warning: session_start(): open(/tmp\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....
因ؓ你没有指定session文g的存放\?

  解决Ҏ:
  (1)在c盘徏立文件夹tmp
  (2)打开php.ini,扑ֈsession.save_path,修改为session.save_path= "c:/tmp"

4:Z么我向另一|页传送变量时,只得到前半部?以空格开头的则全部丢?/p>

  PHP代码:

  <?php
  $Var="hello php";//修改?Var="     hello php";试试得到什么结?br />  $post= "receive.php?Name=".$Var;
  header("location:$post");
  ?>

  receive.php的内?

  PHP代码:

  <?PHP
  Echo "<pre>";
  Echo   $_GET["Name"];
  Echo "</pre>";
  ?>

  正确的方法是:

  PHP代码:

  <?php
  $Var="hello php";
  $post= "receive.php?Name=".urlencode($Var);
  header("location:$post");
  ?>

  在接攉面你不需要用Urldecode(),变量会自动编?
5:如何截取指定长度汉字而不会出C"?>"l尾,出部分?..."代替

  一般来?要截取的变量来自Mysql,首先要保证那个字D长度要_?一般ؓchar(200),可以保持100个汉字,包括标点.

  PHP代码:

  <?PHP
  $str="q个字符好长呀,^_^";
  $Short_Str=showShort($str,4);//截取前面4个汉?l果?q个字符...
  Echo   "$Short_Str";
  Function csubstr($str,$start,$len)
  {
  $strlen=strlen($str);
  $clen=0;
  for($i=0;$i<$strlen;$i++,$clen++)
  {
  if ($clen>=$start+$len)
  break;
  if(ord(substr($str,$i,1))>0xa0)
  {
  if ($clen>=$start)
  $tmpstr.=substr($str,$i,2);
  $i++;
  }
  else
  {
  if ($clen>=$start)
  $tmpstr.=substr($str,$i,1);
  }
  }

  return $tmpstr;
  }
  Function showShort($str,$len)
  {
  $tempstr = csubstr($str,0,$len);
  if ($str<>$tempstr)
  $tempstr .= "..."; //要以什么结?修改q里可?

  return $tempstr;
  }


  6:规范你的SQL语句

  在表|字段前面加上"`",q样׃会因用关键字而出现错误,当然我ƈ不推荐你使用关键?

  例如
  $Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

  "`"怎么输入? 在TAB键上?


  7:如何使Html/PHP格式的字W串不被解释,而是照原hC?/p>

  PHP代码:

  <?PHP
  $str="<h1>PHP</h1>";
  Echo "被解释过? ".$str."<br>l过处理?";
  Echo   htmlentities(nl2br($str));
  ?>


  8:怎么在函数里取得函数外的变量?/p>

  PHP代码:

  <?PHP
  $a="PHP";
  foo();
  Function foo()
  {
   global $a;//删除q里看看是什么结?br />   Echo "$a";
  }
  ?>

9:我怎么知道pȝ默认支持什么函?/p>

  PHP代码:

  <?php
  $arr = get_defined_functions();
  Function php() {
  }
  echo   "<pre>";
  Echo   "q里昄pȝ所支持的所有函?和自定以函数php\n";
  print_r($arr);
  echo   "</pre>";
  ?> 


  10:如何比较两个日期相差几天

  PHP代码:

  <?PHP
  $Date_1="2003-7-15";//也可以是:$Date_1="2003-7-15 23:29:14";
  $Date_2="1982-10-1";
  $d1=strtotime($Date_1);
  $d2=strtotime($Date_2);
  $Days=round(($d1-$d2)/3600/24);
  Echo   "偶已l奋斗了 $Days 天^_^";
  ?>


  11:Z么我升PHP?原来的程序出现满屏的 Notice: Undefined variable:

  q是警告的意?׃变量未定义引L.
  打开php.ini,扑ֈ最下面的error_reporting,修改为error_reporting = E_ALL & ~E_NOTICE

  对于Parse error错误
  error_reporting(0)无法关闭.
  如果你想关闭M错误提示,打开php.ini,扑ֈdisplay_errors,讄为display_errors = Off.以后M错误都不会提C?

  那什么是error_reporting?


  12:我想在每个文件最前,最后面都加上一文g.但一个一个添加很ȝ

  1:打开php.ini文g
  讄 include_path= "c:"

  2:写两个文?
  auto_prepend_file.php ?auto_append_file.php 保存在c?他们自动依附在每个php文g的头部和N.

  3:在php.ini中找?
  Automatically add files before or after any PHP document.
  auto_prepend_file = auto_prepend_file.php;依附在头?br />  auto_append_file = auto_append_file.php;依附在尾?/p>

  以后你每个php文gq当于

  PHP代码:

  <?php
  Include "auto_prepend_file.php" ;

  .......//q里是你的程?/p>

  Include "auto_append_file.php";
  ?>


  13:如何利用PHP上传文g

  PHP代码:

  <html><head>
  <title>上蝲文g表单</title></head>
  <body>
  <form enctype="multipart/form-data" action="" method="post">
  请选择文gQ?<br>
  <input name="upload_file" type="file"><br>
  <input type="submit" value="上传文g">
  </form>
  </body>
  </html>


<?
  $upload_file=$_FILES['upload_file']['tmp_name'];
  $upload_file_name=$_FILES['upload_file']['name'];

  if($upload_file){
  $file_size_max = 1000*1000;// 1M限制文g上传最大容?bytes)
  $store_dir = "d:/";// 上传文g的储存位|?br />  $accept_overwrite = 1;//是否允许覆盖相同文g
  // 查文件大?br />  if ($upload_file_size > $file_size_max) {
  echo "对不P你的文g定w大于规定";
  exit;
  }

  // 查读写文?br />  if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
  Echo   "存在相同文g名的文g";
  exit;
  }

  //复制文g到指定目?br />  if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {
  echo "复制文gp|";
  exit;
  }

  }

  Echo   "<p>你上传了文g:";
  echo  $_FILES['upload_file']['name'];
  echo "<br>";
  //客户端机器文件的原名U?

  Echo   "文g?MIME cd?";
  echo $_FILES['upload_file']['type'];
  //文g?MIME cdQ需要浏览器提供该信息的支持Q例如“image/gif”?
  echo "<br>";

  Echo   "上传文g大小:";
  echo $_FILES['upload_file']['size'];
  //已上传文件的大小Q单位ؓ字节?
  echo "<br>";

  Echo   "文g上传后被临时储存?";
  echo $_FILES['upload_file']['tmp_name'];
  //文g被上传后在服务端储存的时文件名?
  echo "<br>";


  $Erroe=$_FILES['upload_file']['error'];
  switch($Erroe){
          case 0:
             Echo   "上传成功"; break;
          case 1:
             Echo   "上传的文件超q了 php.ini ?upload_max_filesize 选项限制的?"; break;
          case 2:
             Echo   "上传文g的大超q了 HTML 表单?MAX_FILE_SIZE 选项指定的倹{?;    break;
          case 3:
             Echo   "文g只有部分被上?;break;
          case 4:
             Echo   "没有文g被上?;break;
  }
  ?>


  14:如何配置GD?/p>

  下面是我的配|过E?br />  1:用dos命o(也可以手动操?拯dlls文g多w所有dll文g到system32目录? copy c:\php\dlls\*.dll c:\windows\system32\
  2:打开php.ini
  讄extension_dir = "c:/php/extensions/";
  3:
  extension=php_gd2.dll;把extension前面的逗号LQ如果没有php_gd2.dllQphp_gd.dll也一?保证实存在q一文gc:/php/extensions/php_gd2.dll
  4:q行下面E序q行试

  PHP代码:

  <?php
  Ob_end_flush();
  //注意,在此之前不能向浏览器输出M信息,要注意是否设|了 auto_prepend_file.
  header ("Content-type: image/png");
  $im = @imagecreate (200, 100)
     or die ("无法创徏囑փ");
  $background_color = imagecolorallocate ($im, 0,0, 0);
  $text_color = imagecolorallocate ($im, 230, 140, 150);
  imagestring ($im, 3, 30, 50,  "A Simple Text String", $text_color);
  imagepng ($im);
  ?>

  点击q里查看l果


  15:什么是UBB代码

  UBB代码是HTML的一个变U?是Ultimate Bulletin Board (国外一个BBSE序Q国内也有不地方用这个程?采用的一U特D的TAG.
  即ɼ止使用 HTMLQ你也可以用 UBBCode? 来实?也许你更希望使用 UBBCode? 而不?HTML, 即论坛允许使用 HTML, 因ؓ使用h代码较少也更安全.

[回顾]:上集介绍?调试E序","如何使用session","规范SQL语句"{?5个问题(Php高手带\--问题汇总解{[1]Q。本集l作?6条常见问题的解答?/p>

16:我想修改MySQL的用?密码
  首先要声明一点,大部分情况下Q修改MySQL是需要有mysql里的root权限的,

  所以一般用h法更改密码,除非h理?

  Ҏ一

  使用phpmyadminQ这是最单的了,修改mysql库的user表,

  不过别忘了用PASSWORD函数?/p>

  Ҏ?

  使用mysqladminQ这是前面声明的一个特例?

  mysqladmin -u root -p password mypasswd

  输入q个命o后,需要输入root的原密码Q然后root的密码将改ؓmypasswd?

  把命令里的root改ؓ你的用户名,你就可以改你自己的密码了?

  当然如果你的mysqladminq接不上mysql serverQ或者你没有办法执行mysqladminQ?

  那么q种Ҏ是无效的?

  而且mysqladmin无法把密码清I?
  下面的方法都在mysql提示W下使用Q且必须有mysql的root权限Q?

  Ҏ?

  mysql> INSERT INTO mysql.user (Host,User,Password)

  VALUES('%','jeffrey',PASSWORD('biscuit'));

  mysql> FLUSH PRIVILEGES

  切地说q是在增加一个用P用户名ؓjeffreyQ密码ؓbiscuit?

  在《mysql中文参考手册》里有这个例子,所以我也就写出来了?

  注意要用PASSWORD函数Q然后还要用FLUSH PRIVILEGES?/p>

Ҏ?

  和方法三一P只是使用了REPLACE语句

  mysql> REPLACE INTO mysql.user (Host,User,Password)

  VALUES('%','jeffrey',PASSWORD('biscuit'));

  mysql> FLUSH PRIVILEGES

  Ҏ?

  使用SET PASSWORD语句Q?

  mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');

  你也必须使用PASSWORD()函数Q?

  但是不需要用FLUSH PRIVILEGES?/p>

  Ҏ?

  使用GRANT ... IDENTIFIED BY语句

  mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';


  q里PASSWORD()函数是不必要的,也不需要用FLUSH PRIVILEGES?
  注意Q?PASSWORD() [不是]以在Unix口o加密的同h法施行口令加密?


17:我想知道他是通过哪个|站q接到本?br />  PHP代码:

  <?php

  //必须通过q接q入才有输出

  Echo $_SERVER['HTTP_REFERER'];

  ?>

18:数据攑օ数据库和取出来显C在面需要注意什?br />  入库?/p>

  $str=addslashes($str);

  $sql="insert into `tab` (`content`) values('$str')";

  出库?/p>

  $str=stripslashes($str);

  昄?/p>

  $str=htmlspecialchars(nl2br($str)) ;
  <?php

  //$content来自数据?/p>

  $content=nl2br(htmlspecialchars($content));

  $content=str_replace(" ","&nbsp;",$content);

  $content=str_replace("\n","<br>\n",$content);

  ?>

19:如何d当前地址栏信?br />  PHP代码:

  <?php

  $s="http://{$_SERVER['HTTP_HOST']}:{$_SERVER["SERVER_PORT"]}{$_SERVER['SCRIPT_NAME']}";

  $se='';
  foreach ($_GET as $key => $value) {
  $se.=$key."=".$value."&";
  }
  $se=Preg_Replace("/(.*)&$/","$1",$se);
  $se?$se="?".$se:"";
  echo $s."?$se";
  ?>


20:我点d退按钮,Z么之前填写的东西不见
  q是因ؓ你用了session.

  解决办法:
  PHP代码:

  <?php session_cache_limiter('private, must-revalidate');session_start();
  .....................?>

21:怎么在图片里昄IP地址

  PHP代码:

  <? Header("Content-type: image/png");

  $img = ImageCreate(180,50);
  $ip = $_SERVER['REMOTE_ADDR'];

   ImageColorTransparent($img,$bgcolor);

  $bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景颜色

  $shadow = ImageColorAllocate($img, 250,0,0); // 阴媄颜色

  $textColor = ImageColorAllocate($img, oxff,oxff,oxff); // 字体颜色

  ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip);
//昄背景

  ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$ip);

 // 昄IP    

  ImagePng($img);    

  imagecreatefrompng($img);
  ImageDestroy($img);      

  ?>

22:如何取得用户的真实IP

  PHP代码:

  <? function iptype1 () {

   if (getenv("HTTP_CLIENT_IP"))

   {
  return getenv("HTTP_CLIENT_IP");

  }

  else

  {

  return "none";
  }

  }

  function iptype2 () {

  if (getenv("HTTP_X_FORWARDED_FOR"))

  {

   return
  getenv("HTTP_X_FORWARDED_FOR");

  }

  else {

  return "none";
  }

  }

function iptype3 () {

  if (getenv("REMOTE_ADDR"))

  {

   return getenv("REMOTE_ADDR");
  }

   else {

  return "none";

   }

   }

  function ip() {

   $ip1 = iptype1();

   $ip2 = iptype2();

  $ip3 = iptype3();

  if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown")

  {

  return $ip1;

  }

   elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown")
  {

  return $ip2;

  }

  elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown")

   {

  return $ip3;

  }

   else

  { return "none"; }

  }

   Echo ip();

  ?>


23:如何从数据库d三天内的所有记?br />  首先表格里要有一个DATETIME字段记录旉,

  格式?2003-7-15 16:50:00'
  SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3;


24:如何q程链接Mysql数据?/p>

  在增加用Lmysql表里有一个host字段Q修改ؓ"%",或者指定允许连接的ip地址,q样Q你可以远E调用了?br />  $link=mysql_connect("192.168.1.80:3306","root","");


25:正则到底怎么?/p>

正则表达式中的特D字W?/p>

26:用Apache?主页出现q

  Ҏ一:

  AddDefaultCharset ISO-8859-1 改ؓ AddDefaultCharset off
  Ҏ?

  AddDefaultCharset GB2312


27:Z么单引号,双引号在接受面变成(\'\")
  解决Ҏ:

  Ҏ一:在php.ini中设|?magic_quotes_gpc = Off

  Ҏ? $str=stripcslashes($str)


28:怎么让程序一直运行下?而不是超q?0U就停止
  set_time_limit(60)//最长运行时间一分钟

  set_time_limit(0)//q行到程序自q?或手动停?/p>


29:计算当前在线人数
  例子一:用文本实?br />  PHP代码:

  <?php

  //首先你要有读写文件的权限

  //本程序可以直接运?W一ơ报?以后可?/p>

   $online_log = "count.dat"; //保存人数的文?

   $timeout = 30;//30U内没动作?认ؓ掉线

   $entries = file($online_log);
   $temp = array();


for ($i=0;$i<count($entries);$i++) {

   $entry = explode(",",trim($entries[$i]));

   if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time()))
{

   array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他览者的信息,q去掉超时?保存q?temp

   }

   }
   array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."\n");
//更新览者的旉

   $users_online = count($temp); //计算在线人数
   $entries = implode("",$temp);

   //写入文g

   $fp = fopen($online_log,"w");

   flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网l文件系l中正常工作

   fputs($fp,$entries);

   flock($fp,LOCK_UN);

   fclose($fp);
   echo "当前?.$users_online."人在U?;
  ?>


30:什么是模板,怎么?br />  我用的是phplib模板

  下面是其中几个函数的使用
  $T->Set_File("随便定义","模板文g.tpl");
  $T->Set_Block("在set_file中定义的","<!-- 来自模板 -->","随便定义");

  $T->Parse("在Set_Block中定义的","<!-- 来自模板 -->",true);

  $T->Parse("随便输出l果","在Set_File中定义的");
  讄循环格式?
  <!--(多于一个空? BEGIN $handle(多于一个空?-->
  如何模板生成静态网?/p>


  PHP代码:

  <?php

  //q里使用phplib模板

  ............

  ............

  $tpl->parse("output","html");

  $output = $tpl->get("output");// $output 为整个网内?/p>


  function wfile($file,$content,$mode='w') {

  $oldmask = umask(0);

  $fp = fopen($file, $mode);

  if (!$fp) return false;

  fwrite($fp,$content);

  fclose($fp);

  umask($oldmask);

  return true;

  }

  // 写到文g?/p>

  Wfile($FILE,$output);

  header("location:$FILE");//重定向到生成的网?/p>

  }

  ?>
  phplib下蝲地址 smarty下蝲地址


31:怎么用php解释字符   

  比如:输入2+2*(1+2),自动输出8  可以用eval函数

  PHP代码:

  <form method=post action="">

  <input type="text" name="str"><input type="submit">

  </form>

  <?php

  $str=$_POST['str'];

  eval("\$o=$str;");

  Echo "$o";

  ?>


  到此Qphp的问题解{就为大家介l完毕,希望能对各位有所帮助?br />



jackstudio 2006-08-10 12:19 发表评论
]]>
PHPliBc详?/title><link>http://www.tkk7.com/jackstudio/archive/2006/08/10/62765.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Thu, 10 Aug 2006 04:17:00 GMT</pubDate><guid>http://www.tkk7.com/jackstudio/archive/2006/08/10/62765.html</guid><wfw:comment>http://www.tkk7.com/jackstudio/comments/62765.html</wfw:comment><comments>http://www.tkk7.com/jackstudio/archive/2006/08/10/62765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jackstudio/comments/commentRss/62765.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jackstudio/services/trackbacks/62765.html</trackback:ping><description><![CDATA[ <strong>转蝲Q?a >http://bbs.cnaust.com/archiver/?tid-4849.html</a><br /><br />PHPliBc详?br /><br /></strong>自已的BLOGI间打不开了,放些资料在这?br /><br /><br /><?php  <br />/*  <br />* PHPlib模板7.4中文?不之处q请各位指正)  <br />* (C) Copyright 1999-2000 NetUSE GmbH  <br />* Kristian Koehntopp  <br />* 彭赞注释于2004q??QQ:9537075 TEL:13787877670  <br />* Email:mylovepzq@163.com  <br />*/  <br /><br /><br />/*q里是定义类Template*/  <br />class Template  <br />{   <br />/* 如果讄了,则输出参?*/  <br />var $classname = "Template";  <br />var $debug = false; //是否调试  <br />var $root = ".";//root为模板文件的存放目录  <br />var $file = array(); //包含了所有的模板文g名和模板名的数组  <br />var $varkeys = array(); //存放文本元素的键名 ?br />var $varvals = array(); //存放文本元素的值 ?br />var $unknowns = "remove";   <br />/* "remove" => 删除未定义的变量 "comment" => 未定义的变量变成注?"keep" => 保留未定义的变量 */  <br />var $halt_on_error = "yes";  <br />/* "yes" => 退?"report" => 报告错误Ql运? "no" => 忽略错误*/  <br />var $last_error = "";  <br />/* 上一ơ的错误保存在这?*/  <br />/* public: 构造函敊W?br />* root: 模板目录  <br />* unknowns: 如何处理未知的变?译者:变量定义为{ name })  <br />*/  <br /><br /><br />/*q里是定义函数Template*/  <br />function Template($root = ".", $unknowns = "remove")   <br />{   <br />if ($this->debug & 4)   <br />{   <br />echo "<p><b>模板:</b> root = $root, unknowns = $unknowns</p>\n";  <br />}  <br />$this->set_root($root);//默认文件目录设|ؓ相同的目录 ?br />$this->set_unknowns($unknowns);//unknowns默认讄?remove"  <br />}  <br /><br /><br />/*q里是函数set_root*/  <br />function set_root($root)  <br />{   <br />if ($this->debug & 4)   <br />{   <br />echo "<p><b>讄根目?</b> root = $root</p>\n";  <br />}  <br />if (!is_dir($root))  <br />{   <br />$this->halt("讄根目? $root 不是一个无效的目录.");  <br />return false;  <br />}  <br />$this->root = $root;  <br />return true;  <br />}  <br /><br /><br />//q里是函数set_unknowns,卛_未知变量的处理 ?br />function set_unknowns($unknowns = "remove")  <br />{   <br />if ($this->debug & 4)  <br />{   <br />echo "<p><b>未知?</b> 未知 = $unknowns</p>\n";  <br />}  <br />$this->unknowns = $unknowns;  <br />}  <br /><br /><br />/*q里是函数set_file.......................................................*/  <br />//该方法在数组file中根?varname提供的键名加入值 ?br />function set_file($varname, $filename = "")  <br />{   <br />if (!is_array($varname))//如果varname是数l ?br />{   <br />if ($this->debug & 4)  <br />{   <br />echo "<p><b>讄文g:</b> (with scalar) varname = $varname, filename = $filename</p>\n";  <br />}  <br />if ($filename == "")//如果文g名ؓI?输出错误  <br />{   <br />$this->halt("讄文g:变量?$varname 文g名是I的.");  <br />return false;  <br />}  <br />$this->file[$varname] = $this->filename($filename);  <br />}   <br />else  <br />{   <br />reset($varname);//varname的键名作为file数组的键名 ?br />//键名对应的g为file数组的值 ?br />while(list($v, $f) = each($varname))  <br />{   <br />if ($this->debug & 4)  <br />{   <br />echo "<p><b>set_file:</b> (with array) varname = $v, filename = $f</p>\n";  <br />}  <br />if ($f == "")  <br />{   <br />$this->halt("set_file: For varname $v filename is empty.");  <br />return false;  <br />}  <br />$this->file[$v] = $this->filename($f);  <br />}  <br />}  <br />return true;  <br />}  <br /><br /><br />//该方法取出某个父模板文g中的一个子模板  <br />//其作ؓ块来加蝲  <br />//q用另外一个模板变量取代之  <br />/* public: set_file(array $filelist)  <br />* comment: 讄多个模板文g  <br />* filelist: Q句柄,文g名)数组  <br />* public: set_file(string $handle, string $filename)  <br />* comment: 讄一个模板文件 ?br />* handle: 文g的句柄 ?br />* filename: 模板文g名 ?br />*/  <br />function set_block($parent, $varname, $name = "") {   <br />if ($this->debug & 4) {   <br />echo "<p><b>set_block:</b> parent = $parent, varname = $varname, name = $name</p>\n";  <br />}  <br />if (!$this->loadfile($parent)) {   <br />$this->halt("set_block: unable to load $parent.");  <br />return false;  <br />}  <br />if ($name == "") {   <br />$name = $varname;//如果没有指定模板变量的值就用子模板名作为模板变量名  <br />}  <br /><br />$str = $this->get_var($parent);  <br />$reg = "/[ \t]*<!--\s+BEGIN $varname\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $varname\s+-->\s*?\n?/sm";  <br />preg_match_all($reg, $str, $m);  <br />$str = preg_replace($reg, "{ " . "$name }", $str);  <br />$this->set_var($varname, $m[1][0]);  <br />$this->set_var($parent, $str);  <br />return true;  <br />}  <br /><br /><br />//该方法向Varname和varkeys数组中添加新的键一值对  <br />/* public: set_var(array $values)  <br />* values: (变量名,?数组  <br />* public: set_var(string $varname, string $value)  <br />* varname: 被定义的变量名  <br />* value: 变量的值 ?br />*/  <br />function set_var($varname, $value = "", $append = false) {   <br />if (!is_array($varname))//如果不是阵列  <br />{   <br />if (!empty($varname)) //如果是空的 ?br />{   <br />if ($this->debug & 1) {   <br />printf("<b>set_var:</b> (with scalar) <b>%s</b> = ?s?lt;br>\n", $varname, htmlentities($value));  <br />}  <br />$this->varkeys[$varname] = "/".$this->varname($varname)."/";  <br />if ($append && isset($this->varvals[$varname])) {   <br />$this->varvals[$varname] .= $value;  <br />} else {   <br />$this->varvals[$varname] = $value;  <br />}  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (!empty($k)) {   <br />if ($this->debug & 1) {   <br />printf("<b>set_var:</b> (with array) <b>%s</b> = ?s?lt;br>\n", $k, htmlentities($v));  <br />}  <br />$this->varkeys[$k] = "/".$this->varname($k)."/";  <br />if ($append && isset($this->varvals[$k])) {   <br />$this->varvals[$k] .= $v;  <br />} else {   <br />$this->varvals[$k] = $v;  <br />}  <br />}  <br />}  <br />}  <br />}  <br /><br /><br />//定义函数clear_var  <br />function clear_var($varname) {   <br />if (!is_array($varname))//如果varname不是阵列  <br />{   <br />if (!empty($varname)) //如果是空的 ?br />{   <br />if ($this->debug & 1) {   <br />printf("<b>clear_var:</b> (with scalar) <b>%s</b><br>\n", $varname);  <br />}  <br />$this->set_var($varname, "");  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (!empty($v)) {   <br />if ($this->debug & 1) {   <br />printf("<b>clear_var:</b> (with array) <b>%s</b><br>\n", $v);  <br />}  <br />$this->set_var($v, "");  <br />}  <br />}  <br />}  <br />}  <br /><br /><br />/*q里是函数unset_var,删除变量的定?/  <br />function unset_var($varname) {   <br />if (!is_array($varname)) {   <br />if (!empty($varname)) {   <br />if ($this->debug & 1) {   <br />printf("<b>unset_var:</b> (with scalar) <b>%s</b><br>\n", $varname);  <br />}  <br />unset($this->varkeys[$varname]);  <br />unset($this->varvals[$varname]);  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (!empty($v)) {   <br />if ($this->debug & 1) {   <br />printf("<b>unset_var:</b> (with array) <b>%s</b><br>\n", $v);  <br />}  <br />unset($this->varkeys[$v]);  <br />unset($this->varvals[$v]);  <br />}  <br />}  <br />}  <br />}  <br /><br /><br />//模板文件中的变化内Ҏ换成定内容的操?实现数据和显C的分离  <br />function subst($varname) {   <br />$varvals_quoted = array();  <br />if ($this->debug & 4) {   <br />echo "<p><b>subst:</b> varname = $varname</p>\n";  <br />}  <br />if (!$this->loadfile($varname)) //装蝲模板文g,如果出错停止 ?br />{   <br />$this->halt("subst: unable to load $varname.");  <br />return false;  <br />}  <br /><br />reset($this->varvals);  <br />while(list($k, $v) = each($this->varvals)) {   <br />$varvals_quoted[$k] = preg_replace(array(?\\\\/? ?\$/?, array(’\\\\\\? ’\\\\$?, $v);  <br />}  <br /><br />//d文g内容到字W串中ƈ在下行对已知键D行替换ƈq回l果  <br />$str = $this->get_var($varname);  <br />$str = preg_replace($this->varkeys, $varvals_quoted, $str);  <br />return $str;  <br />}  <br /><br /><br />//同subst,只是直接输出l果  <br />function psubst($varname) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>psubst:</b> varname = $varname</p>\n";  <br />}  <br />print $this->subst($varname);  <br /><br />return false;  <br />}  <br /><br /><br />//varname代表的一个或多个文g中的内容完成替换  <br />//存放在target为键值的varvals数组无素中或q加到其后 ?br />//q回值和sub相同  <br />function parse($target, $varname, $append = false) {   <br />if (!is_array($varname)) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>parse:</b> (with scalar) target = $target, varname = $varname, append = $append</p>\n";  <br />}  <br />$str = $this->subst($varname);  <br />if ($append) {   <br />$this->set_var($target, $this->get_var($target) . $str);  <br />} else {   <br />$this->set_var($target, $str);  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($i, $v) = each($varname)) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>parse:</b> (with array) target = $target, i = $i, varname = $v, append = $append</p>\n";  <br />}  <br />$str = $this->subst($v);  <br />if ($append) {   <br />$this->set_var($target, $this->get_var($target) . $str);  <br />} else {   <br />$this->set_var($target, $str);  <br />}  <br />}  <br />}  <br /><br />if ($this->debug & 4) {   <br />echo "<p><b>parse:</b> completed</p>\n";  <br />}  <br />return $str;  <br />}  <br /><br /><br />//同parseҎ,只是该方法将l果输出  <br />function pparse($target, $varname, $append = false) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>pparse:</b> passing parameters to parse...</p>\n";  <br />}  <br />print $this->finish($this->parse($target, $varname, $append));  <br />return false;  <br />}  <br /><br /><br />//q回所有的键一值对中的值所l成的数l ?br />function get_vars() {   <br />if ($this->debug & 4) {   <br />echo "<p><b>get_vars:</b> constructing array of vars...</p>\n";  <br />}  <br />reset($this->varkeys);  <br />while(list($k, $v) = each($this->varkeys)) {   <br />$result[$k] = $this->get_var($k);  <br />}  <br />return $result;  <br />}  <br /><br /><br />//Ҏ键名q回对应的键一值勤对应的值 ?br />function get_var($varname) {   <br />if (!is_array($varname)) //如果不是阵列  <br />{   <br />if (isset($this->varvals[$varname])) //如果变量不存在 ?br />{   <br />$str = $this->varvals[$varname];  <br />} else {   <br />$str = "";  <br />}  <br />if ($this->debug & 2) {   <br />printf ("<b>get_var</b> (with scalar) <b>%s</b> = ?s?lt;br>\n", $varname, htmlentities($str));  <br />}  <br />return $str;  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (isset($this->varvals[$v])) {   <br />$str = $this->varvals[$v];  <br />} else {   <br />$str = "";  <br />}  <br />if ($this->debug & 2) {   <br />printf ("<b>get_var:</b> (with array) <b>%s</b> = ?s?lt;br>\n", $v, htmlentities($str));  <br />}  <br />$result[$v] = $str;  <br />}  <br />return $result;  <br />}  <br />}  <br /><br /><br />//如果加蝲文gp|,q回错误q停止 ?br />function get_undefined($varname) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>get_undefined:</b> varname = $varname</p>\n";  <br />}  <br />if (!$this->loadfile($varname)) {   <br />$this->halt("get_undefined: unable to load $varname.");  <br />return false;  <br />}  <br /><br />preg_match_all("/{ ([^ \t\r\n }]+) }/", $this->get_var($varname), $m);  <br />$m = $m[1];  <br />//如果无法扑ֈ匚w的文?q回错误  <br />if (!is_array($m)) {   <br />return false;  <br />}  <br />//如果能找到大括号中的非空字符,则将其g为键?l成一个新的数l ?br />reset($m);  <br />while(list($k, $v) = each($m)) {   <br />if (!isset($this->varkeys[$v])) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>get_undefined:</b> undefined: $v</p>\n";  <br />}  <br />$result[$v] = $v;  <br />}  <br />}  <br />//如是该数l不为空p回该数组,否则p回错误 ?br />if (count($result)) {   <br />return $result;  <br />} else {   <br />return false;  <br />}  <br />}  <br /><br /><br />//完成对str的最后的处理工作,利用cȝ属性unknowns来确定对模板中无法处理的动态部分的处理Ҏ  <br />function finish($str) {   <br />switch ($this->unknowns) {   <br />case "keep": //保持不变  <br />break;  <br /><br />case "remove": //删除所有的非控制符  <br />$str = preg_replace(?{ [^ \t\r\n }]+ }/? "", $str);  <br />break;  <br /><br />case "comment"://大括号中的HTML注释  <br />$str = preg_replace(?{ ([^ \t\r\n }]+) }/? "<!-- Template variable \\1 undefined -->", $str);  <br />break;  <br />}  <br /><br />return $str;  <br />}  <br /><br /><br />//参数变量对诮的数组中的值处理后输出  <br />function p($varname) {   <br />print $this->finish($this->get_var($varname));  <br />}  <br /><br /><br />//参数变量对应的数组中的值处理后q回  <br />function get($varname) {   <br />return $this->finish($this->get_var($varname));  <br />}  <br /><br /><br />//查ƈ补充l定的文件名  <br /><br />function filename($filename) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>filename:</b> filename = $filename</p>\n";  <br />}  <br />if (substr($filename, 0, 1) != "/")   <br />//如果文g名不是以斜杠开?则表C是相对路径,其补充为完整的l对路径   <br />{   <br />$filename = $this->root."/".$filename;  <br />}  <br />//如果文g不存在 ?br />if (!file_exists($filename)) {   <br />$this->halt("filename: file $filename does not exist.");  <br />}  <br />return $filename;//q回文g名 ?br />}  <br /><br /><br />//对变量名q行处理,正则表辑ּ中的敏感字符变ؓ转义字符,q在变量名两端加上大括号  <br />function varname($varname) {   <br />return preg_quote("{ ".$varname." }");  <br />}  <br /><br /><br />//该方法根据varname加蝲文g到键一值对中 ?br />function loadfile($varname) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>loadfile:</b> varname = $varname</p>\n";  <br />}  <br /><br />if (!isset($this->file[$varname])) //如果没有指定p加错误 ?br />{   <br />// $varname does not reference a file so return  <br />if ($this->debug & 4) {   <br />echo "<p><b>loadfile:</b> varname $varname does not reference a file</p>\n";  <br />}  <br />return true;  <br />}  <br /><br />if (isset($this->varvals[$varname]))//如果已经加蝲了varname为名柄的文g,直接q回真值 ?br />{   <br />if ($this->debug & 4) {   <br />echo "<p><b>loadfile:</b> varname $varname is already loaded</p>\n";  <br />}  <br />return true;  <br />}  <br />$filename = $this->file[$varname];//句柄有效则取出对应的文g名 ?br />$str = implode("", @file($filename));//文件的每一行连接成一个字W串  <br />if (empty($str)) //字符串空说明文gI或者不存在,q回错误  <br />{   <br />$this->halt("loadfile: While loading $varname, $filename does not exist or is empty.");  <br />return false;  <br />}  <br />if ($this->debug & 4) {   <br />printf("<b>loadfile:</b> loaded $filename into $varname<br>\n");  <br />}  <br />$this->set_var($varname, $str);//如果文g不ؓI??varname作ؓ句柄,str为变量名  <br />//向键值对中添加新的键值 ?br /><br />return true;  <br />}  <br /><br />//分析结果保存到文g中去  <br />  function savetofile ($dir,$varname){   <br />   $data=$this->finish($this->get_var($varname));  <br />   $fp=fopen($dir,"w+");  <br />   fwrite($fp,$data);  <br />  }  <br /><br /><br />  //清除已赋值数l ?br />   function renew(){   <br />    $this->varkeys=array();  <br />    $this->varvals=array();  <br />    $this->file=array();  <br />    }  <br /><br /><br />//出错提示q终止程序运行 ?br />function halt($msg) {   <br />$this->last_error = $msg;  <br /><br />if ($this->halt_on_error != "no") {   <br />$this->haltmsg($msg);  <br />}  <br /><br />if ($this->halt_on_error == "yes") {   <br />die("<b>l止.</b>");  <br />}  <br /><br />return false;  <br />}  <br /><br /><br />//出错提示  <br />function haltmsg($msg) {   <br />printf("<b>模板错误:</b> %s<br>\n", $msg);  <br />}  <br /><br />}  <br />?><br /><br /><br /><br /><br /><strong>SOLO</strong><div id="nrlnzpv" class="subtable altbg2 t_msg">PHPLIB Templatecȝ使用?诚然,|络上已l很多相关的话题?但据我观?中文的资料实在不?且大多是讲的太笼l?没能全面阐述它的用法,即看了q是一知半?所以本文就期望通过对它的比较全面的介绍,让你能达到入门的水^. <br />何谓"模板"技?br /><br />我们的最初观察是界面和实现代码分离开?q样做的目的是将工和程序员的工作分d?PHP的一个优Ҏ可以把PHP代码嵌入HTML里面,q样你就不必再把大段HTML代码用函数print()输出?<br />print("<table border=0 cellspacing=1 cellpadding=2 width=100%>"); <br />print("<tr>"); <br />print("<td>"); <br />print("我爱?kiki"); <br />print("</td>"); <br />print("</tr>"); <br />print("</table>"); <br />q段代码对界面维护来说是相当困难?除非E序员做q样事情且他Ҏ式表,HTML非常_N?取而代之的我们?br /><table border=0 cellspacing=1 cellpadding=2 width=100%> <br />    <tr> <br />        <td> <br />            <?php print("我爱?kiki ");?> <br />        </td> <br />    </tr> <br /></table> <br />q样,做美工设计的只要不碰PHP代码,可以很方便地改变这个表格的样式,如果使用dreamweaver{所见即所的工?会更加方便.<br /><br />现在的一个问题是,如果工正在修改的话,E序员仍需要把q个文g取回?才能改变里面的PHP代码,修改完后再交l美?q样循环往?往往要花费大量的旉和精?如果你所在公司是采取q种模式的话,恐怕老板Z节省旉,会把很多界面设计也交l程序员来做,毕竟他不会让你们M一个闲座着{待.作ؓE序员的你此时可能会梦想:如果E序员只要负责写E序代码,不理会o人烦w的界面,那就太好?<br /><br />或许Fast Template诞生那刻?我不敢确定它是最早的PHP模板处理c?但用h实很方?,你的梦想几q实?{划们把东西交给?当然里面的元素都写好了的,形如以下tpl.html<br /><table border=0 cellspacing=1 cellpadding=2 width=100%> <br />    <tr> <br />        <td> <br />            我爱你{MY_LOVE} <br />        </td> <br />    </tr> <br /></table> <br />你只需要在E序里给q些元素(MY_LOVE)赋值就行了tpl.php<br />    $tpl->assign("MY_LOVE", "kiki"); <br />你基本上不用这些元素的样式(比如字体,宽度,高度{?,所在位|?甚至q些元素来可能不再使用?与此同时,工那边把元素放q一个HTML面?q个面是我们所说的"模板"),他也不用担心会不心把你的程序给搞坏?然后做完后交l一个专门负责程序和工l合的h(当然在国内也是程序员做这样事?,他很可能只需要很的几个修改可以把两者结合的很好.q样对你,对美?都大大提高了工作效率,老板自然也会很高兴啦.<br /><br />所以我q里所说的"模板"技?是可以程序和工分离的技?注意不是逻辑抽象层与表现层的分离.一?那样会让h不知所?因ؓ"逻辑抽象"q四个字已l太抽象?且表现层q只是美工所做的模板.所?很多图把Fast Template,PHPLIB Template两个与Smarty相比?在我看来,q是明显不对?<br /><br />PHPLIB TemplatecM是一个用PHP代码处理模板的一个类.也是本文要将要阐q的一个模板类.同上面讲的一?它能把模板中?元素"替换Z为它讑֮的?,且处理的很很?也容易扩?׃使用了preg_函数,所以速度也比较快.很多人都会提Z个意?使用模板会让你的代码q行的更?实是这L,如果你用嵌入式写法,会快一?如果把PHPq同HTML全部写入PHP??print("<html标签>"); ),可能会更?但如果综合考虑整个目的开发效?以及后期l护性的?q些代h是可以承受的,而且慢也不会慢哪里去,真正的问题所在可能是你的模板实在是太大了.当然,你也可以改进q个模板c?让它q行的更?<br /><br />提vPHPLIB Template,很多然会联想起Fast Template?我也不例?因ؓ两者很多地斚w很相q?Ҏ,很多人都做了比较,在这里我׃再详qC,或许王晨的这文章值得一? 在PHP世界中选择最合适的模板<br /><br /><br />获取<br /><br />可以从这里下?[url]http://www.sanisoft.com/phplib/download.phpPHPLIB[/url] ,然后从压~包中php目录下取出template.inc,可以供我们使用?<br /><br />文档<br /><br />英文文档 [url]http://www.sanisoft.com/phplib/manual/template.php[/url] <br />我翻译的中文文档(仅做参? [url]http://www.4kiki.net/php_lib_template/[/url] <br />q有|上的很多资?可以通过google搜烦得到.<br /><br />从类里面注释可以知道,最新版本是2002/07/11 22:29:51?.12?所?你或讔R要修改一些东?在你懂的前提?我们q可以下载它的PEAR集成版本([url]http://pear.php.net/package/HTML_Template_PHPLIB/download)[/url] , 不过你的PHP版本需要在4.3.0以上.<br /><br /><br /><br /><br /><div id="bdjvzxt" class="subtable altbg1"><span id="lnprlbh" class="right">2005-11-8 23:19</span><b>SOLO</b></div><div id="xxbdzfx" class="subtable altbg2 t_msg">一个封装很好的cd使用?可能不是开发者本?来说,最大的好处是,你无需知道cd部是怎么q作?只需知道如何利用它提供的接口做你惛_的事情即?所?本文不打具体讲qPHPLIB Template(以下UTemplate)是如何将"元素"转换???你需要了解的?它能q样?,而不?它ؓ什么能q样?. <br />好了,下面我们开始它的第一个应用了.<br /><br />先在我们要测试的|站的目录下Z个文件夹inc和template.目录inc下放引用文g,比如cd,函数库等,q里我们把template.inc攑֦该目录下.tempate下放模板文g,我们先徏一个模板文件first.html,内容如下<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的W一个模板文?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />真想对你_我爱?{lover} Q但我却不敢_因ؓ我知道你q人是 {man}. <br /><P> <br /><font color="#0000FF">{author}</font> ?{date} <br /></BODY> <br /></HTML> <br />用inc,template命名文g目录,都是我的个h习惯,你完全可以采取不同的方式.我用扩展名ؓ.html的名U命名模板文?是ؓ了方便美工用frontpage或者dreamweaver修改,但这完全取决于你自己的习?<br /><br />first.html模板中的{lover},{man},{author}可以UCؓ"模板变量",用花括号({})把变量名U括住即l成一个模板变?模板变量是模板元素的一U。你可能会担心它的命名问?其实除了I格(" "),回R换行("\r", "\n"),tab(\t)外它都被视ؓ是正的.所?br />{your-lover}<br />也是正确?q点有时可能会o你很痛苦,因ؓ模板里的有些javascript代码可能无意间变没有?比如<br />if(a>b){document.write("i love u");}<br />中的<br />{document.write("i love u");}<br />也被视ؓ一个变量了.上面的代码在你选的模板处理方式?可能会变成if(a>b){},从而导致javascript错误.Z么会"变没"了呢?E后做解释.<br /><br />上面我们定义的三个变量{lover},{man},{author}的原因是,我们想随时改变它们的?下面我们来做这个工?新徏first.php文g,内容如下:<br /><?php <br />//包含q模板类 template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实?<br />$tpl = new Template("template", "keep"); //? <br /><br />//整个文件读q来 <br />$tpl->set_file("main", "first.html"); //? <br /><br />//l文件中的模板变量赋?<br />$tpl->set_var("lover", "kiki"); //? <br />$tpl->set_var("man", "ccterran"); //? <br />$tpl->set_var("author", "iwind"); //? <br /><br />//完成替换 <br />$tpl->parse("mains", "main"); //? <br /><br />//输出替换的结?<br />$tpl->p("mains"); //? <br /><br />?> <br />览器中览q个文g,你就会发现输?br /><br /><br />真想对你_我爱?kiki Q但我却不敢_因ؓ我知道你q人是 ccterran. <br /><br />iwind ?{date} <br /><br /><br />q一切正如我们所期望?除了{date}).?<br />$tpl = new Template("template", "keep"); <br />是创Z个Templatecȝ实例对象.它有两个参数,都是可选的.<br /><br />W一个参数是模板所在目?如果不设|则?."(卛_前目?,׃我们刚才把模板文件first.html攑ֈtemplate下了,所以这里ؓtemplate.注意它一般用相对\?如果你用相对于根目录(比如 /phplib/test/template)的\?׃出现<br />Template Error: set_root: /phplib/test/template is not a directory. <br />Halted. <br />的错?<br /><br />W二个参数是指定模板cd"未完成处?变量的处理方?所?未完成处?指的是模板变量未赋?块未完成替换工作(下面一节将讲到?,它有三个值可?分别?keep","comment","remove":<br />如果设ؓ"keep",q些变量原不动的保留下来.<br />如果设ؓ"comment",那么会在报错的同?未完成处理的变量全部{换成HTML的注?<br />如果设ؓ"remove",未完成处理的变量便会被删?q也是默认的情况).<br /><br />所以在上面的例子中,我指定的?keep",于是{date}因ؓ未赋?所以还保留着.而缺省的情况下是"remove",所?如果我这样创建实例对?br />$tpl = new Template("template", "remove");<br />或?br />$tpl = new Template("template");<br />的话,输出变成了<br />真想对你_我爱?kiki Q但我却不敢_因ؓ我知道你q人是 ccterran. <br /><br />iwind ?br /><br /><br /><br />可以看出{date}被删除了.如果?br />$tpl = new Template("template", "comment");<br /><br />它的l果是<br /><br /><br />真想对你_我爱?kiki Q但我却不敢_因ؓ我知道你q人是 ccterran. <br /><br />iwind ?br /><br /><br />看v来和"remove"方式一?但查看源文g,我们会发?br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的W一个模板文?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />真想对你_我爱?kiki Q但我却不敢_因ؓ我知道你q人是 ccterran. <br /><P> <br /><font color="#0000FF">iwind</font> ?<!-- Template variable date undefined --> <br /></BODY> <br /></HTML> <br /><br />其中?lt;!-- Template variable date undefined -->的错误信?告诉我们date变量未定?赋?.<br /><br />?comment"或许对程序的调试很有帮助.<br /><br />我们再回头看?br />if(a>b){document.write("i love u");} <br />?br />{document.write("i love u");} <br />?变没"的问?是因为模板类视之为模板变?但你没有l它指定?当然会没?,且你没有指定"keep"方式来处理未定义变量,所以它p"remove"?<br /><br />所以在模板使用q程中应该多多注意这些问?<br /><br />?是将一个模板文件加载进?事实上你可以一ơ加载多个模?在第四节讲到这个问?.你可以想?br />$tpl->set_file("main", "first.html"); <br />?first.html"内容l变?main"(管很多人称之ؓ"句柄",但本文决定不?句柄"),所?main"的值就变成模板的内容了,包含着那些模板变量.<br /><br />?,?,?,是给模板变量赋?值是什?你自然可以随便定.比如你还可以<br />$tpl->set_var("lover", "kiki1"); <br />$tpl->set_var("man", "ccterran1"); <br />$tpl->set_var("author", "iwind_php"); <br />你也可以一ơ完成给一列的变量赋?q样<br />$tpl->set_var( <br />array("lover"=>"kiki", "man"=>"ccterran", "author"=>"iwind") <br />); <br />如果你想讄一个变量的gؓI的?可以<br />$tpl->set_var("man", ""); <br />或?br />$tpl->set_var("man"); <br /><br />?,是执行将上面$tpl->set_varl模板变量指定的值替换掉模板中的模板变量q个操作,W一个参数即为模板分析的l果,也可以视Z个变?<br /><br />当然??$tpl->p("mains"); 将模板分析的结果如你所愿的输出?<br /><br />?恭喜?你的W一个模板类应用完成了.你可能不心弄错了哪个地?模板c默认情况下会自动打印出错误提示?Ҏq些提示,你就很容易就可以扑և问题所?在第6节将会具体讲?<br /><br /><br /><strong>SOLO</strong><div id="hztvfvd" class="subtable altbg2 t_msg">PHPLIB Template入门pd - 3 块的应用 <br />在上一节中,我们知道模板元素的一U?模板变量,q知道如何在E序中给它赋?使之呈现我们惌的东?q对一般的单网|?或许已l够用了.现在我们设想一E微复杂的一U情?在template目录下新Z个second.html模板文g,内容?<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的W二个模板文?</TITLE> <br /></HEAD> <BODY> <br />下面是一个列?<br /><UL> <br /><li>张三 的成l是 82 <br /><li>李四 的成l是 90 <br /><li>王儿 的成l是 60 <br /><li>d 的成l是 77 <br /></UL> <br /></BODY> <br /></HTML> <br />上面的列表中列出?张三","李四","王二","d"四h的成l?假设要用PHP代码嵌入HTML的方式输出的?你可能是q样写的:<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的W二个模板文?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />下面是一个列?<br /><?php <br />$result = mysql_query("SELECT username,score FROM my_tbl"); <br />?> <br /><UL> <br /><?php <br />while ($row = mysql_fetch_array($result)) <br />{ <br />?> <br /><li><?=$row["username"]?> 的成l是 <?=$row["score"]?> <br /><?php <br />} <br />?> <br /></UL> <br /></BODY> <br /></HTML> <br /><br />q样写很适合PHP新手,但你很快发现你或者美工改q个列表样式的时候需要多么的心翼,特别是美?如果他不懂你写得PHP代码,那么他会l日生在恐惧之中!因ؓE微的不心,可能׃带来E序的运行错?而且如果他想把这个列表从一个地方移到另一个地?也是相当不容易的.于是作ؓE序员的你不得不把美工(虽然你做的可能性更大)修饰q的面重新审查一ơ,无Ş中就造成Ҏ费力?br /><br />现在好了,有了Template模板c?你可以把你的代码从模板中抽取出来?你可能会q样修改second.html模板:<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的W二个模板文?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />下面是一个列?<br /><UL> <br /><li>{username1} 的成l是 {score1} <br /><li>{username2} 的成l是 {score2} <br /><li>{username3} 的成l是 {score3} <br /><li>{username4} 的成l是 {score4} <br /></UL> <br /></BODY> <br /></HTML> <br /><br />昄,你采取了一个良好的命名方式,?,2,3..来表C每一行数?然后你在你的E序里@环给q些变量赋?也是不难?比如:(second.php)<br /><br /><?php <br />//包含q模板类 template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实?<br />$tpl = new Template("template"); <br /><br />//整个文件读q来 <br />$tpl->set_file("main", "first.html"); <br /><br />//q接数据库,选择数据库略 <br />省略..... <br /><br />//查询l果 <br />$result = mysql_query("SELECT username,score FROM my_tbl"); <br /><br />//l文件中的模板变量赋?<br />$i=0; <br />while ($row = $idb->fetch_array($result)) <br />{ <br />$i++; <br />$tpl->set_var("username" . $i, $row["username"]); <br />$tpl->set_var("score" . $i, $row["score"]); <br />} <br /><br />//完成替换 <br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->pparse("mains", "main"); <br /><br />?> <br /><br />q样你也能得到正结?在特D情况下你或讔R要这样做.但Template提供了一个更方便?大的模板变量",那就是块.我之所以称之ؓ"大的模板变量",是因为它也可以视为可以包含其他模板变量的变量.形式?br /><UL> <br /><!-- BEGIN list --> <br /><li>{username} 的成l是 {score} <br /><!-- END list --> <br /></UL> <br /><br />即用<!-- BEGIN 块名U?-->?lt;!-- END 块名U?-->定义了一个名为list的块,(注意:我在q里Z方便理解,只称之ؓ块名U?.q个块里面又包含一些HTML代码(<li>{等)以及模板变量({username},{score}).<br /><br />在讲q如何用块输出列表之?我们先谈一下块的定义格?<br /><br />首先<!-- BEGIN list -->?lt;!-- END list --> 都要各自Z?亦即下面的块的定义是错误?br />1,<br />同行?<!-- BEGIN list --> <br /><li>{username} 的成l是 {score} <br /><!-- END list --> <br />2,<br /><!-- BEGIN list --> <br /><li>{username} 的成l是 {score} <br /><!-- END list --> 同行?<br /><br /><!--?->都是固定?也就是说只能是两个中划线("-"),且它们与BEGIN list之间都至有一个空(I格或tab),看下面的例子<br /><!--BEGIN list --> <br /><!-- BEGIN list--> <br />它们都是错误的块的定义方?因ؓW一?lt;!--与BEGIN之间臛_应该有一个空,W二?->与list之间臛_有一个空.<br /><br />BEGIN/END和list之间也应该有一个空?注意是有且仅有一个空?不能多也不能?<br /><br />块的名称你只使用字符,数字,下划U以及它们的l合.<br /><br />BEGIN和END两个词语都应该是大写的?br /><br />好了,下面开始探讨如何是q个块变成一个列?我们可以q样<br /><?php <br />//包含q模板类 template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实?<br />$tpl = new Template("template"); <br /><br />//整个文件读q来 <br />$tpl->set_file("main", "second.html"); <br /><br />//加蝲块list <br />$tpl->set_block("main", "list", "lists"); <br /><br />//q接数据库,选择数据库略 <br />省略..... <br /><br />//查询l果 <br />$result = mysql_query("SELECT username,score FROM my_tbl"); <br /><br />//l文件中的模板变量赋?<br />while ($row = $idb->fetch_array($result)) <br />{ <br />$tpl->set_var("username", $row["username"]); <br />$tpl->set_var("score", $row["score"]); <br />$tpl->parse("lists", "list", true); <br />} <br /><br />//完成替换 <br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->pparse("mains", "main"); <br /><br />?> <br /><br />C把你的数据库q接写在我省略的部分,可以打印正的l果,一?br /><br />下面是一个列?<br /><br />张三 的成l是 82 <br />李四 的成l是 90 <br />王儿 的成l是 60 <br />d 的成l是 77 <br /><br /><br /><br />可以看到在PHP代码里有两个东西 <br />$tpl->set_block("main", "list", "lists"); //代码1 <br />$tpl->parse("lists", "list", true); <br />׃可思议的将整个块@环输Z.代码1用来加蝲模板main中的块list,q给其一个名字lists,list是模板中的一个大变量,它的内容是<li>{username} 的成l是 {score}?<br />"list" = "<li>{username} 的成l是 {score}" <br />之所以用lists命名,是ؓ了程序的可读?也就是说我很Ҏq道XXXs是XXX块的名称.<br /><br />使用set_block后,模板中的块内?br /><!-- BEGIN list --> <br /><li>{username} 的成l是 {score} <br /><!-- END list --> <br />plists代替?于是我们的模板就变成?br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的W二个模板文?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />下面是一个列?<br /><UL> <br />{lists} <br /></UL> <br /></BODY> <br /></HTML> <br /><br />块变成了一个变?lists)!下面只要lists变量替换成我们想要的p?<br /><br />代码二所处的循环<br />while ($row = $idb->fetch_array($result)) <br />{ <br />$tpl->set_var("username", $row["username"]); <br />$tpl->set_var("score", $row["score"]); <br />$tpl->parse("lists", "list", true); //代码2 <br />} <br />每一ơ@?两个set_var分别lusername,score赋?然后"list"变成了<br />"list" = "<li>具体的名?的成l是 具体的分?<br />代码2是list分析后的内容赋给lists,q样完成了整个块的分析.<br /><br />parseW三个参数可以设|list中的值是直接存在lists里面,q是附加在原有g?我们q里讄为true,说明是附加在原有g?才得以每个list的值都会显C出?反之设ؓfalse的话,后面的g覆盖掉以前的?最l的l果会是<br /><br /><br />下面是一个列?<br /><br />d 的成l是 77 <br /><br /><br />lg所q?Template模板cȝ替换方式?<br />1,用set_block模板中的list?或者你命名的其他块)替换成变量lists.<br />2,用set_varllist块中的变量赋?br />3,把赋值ƈ执行替换后的list内容依次llists<br />4,完成分析<br /><br /><div id="tlnhrzn" class="subtable altbg1"><span id="tlpjvbj" class="right">2005-11-8 23:20</span><b>SOLO</b></div><div id="jzrvjzr" class="subtable altbg2 t_msg">在PHPE序?我们常常会把"公用代码"?公用部分"写进一个文仉,前者象我们的系l配|文?比如config.php,或者公共函数都写入一个functions.php文g?后者象一个站炚w需要用到的面头部,N.q样做的好处是可以很方便的维护站?而如果这个公用部分要有所改动,无需再去Ҏ一个页?大大减少了我们的工作? <br />以前你或许用require,include(require_once,include_once)引进一个公用的面头部,实方便而有?现在我们用Template模板cM可以实现?q且可以很方便的把一个页面随意插入另一个模板的L地方.如果你想也把要插q的面做成含有变量的模板的?那么你会发现模板cM把这个工作处理的很好.<br /><br />在template目录下新Z个文件third.html,header.html,footer.html.内容分ؓ如下<br />third.html <br /><!-- q是面头部 --> <br />{header} <br /><BODY> <br />下面是一个列?<br /><UL> <br /><!-- BEGIN list --> <br /><li>{username} 的成l是 {score} <br /><!-- END list --> <br /></UL> <br /><!-- q是面脚部 --> <br />{footer} <br /></BODY> <br /></HTML> <br /><br />header.html<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> {title} </TITLE> <br /></HEAD> <br /><br />footer.html<br /><P>author &copy; iwind <br /><br />你也看到了,我们前几节的例子中都是用<br />$tpl->set_file("main", "模板文g?); <br />来加载模板文件的。只所以命名ؓ"main",是因为我们想l它一个意义:Lѝ这里的third.html可以称之ؓ“主模板”,而欲嵌入L板third.html的{header}变量所在位|的模板文gheader.html,则可以称?子模?.同样footer.html也是一?子模?,我们x它放C模板里的{footer}位置.一个主模板内可以随意嵌入不限内?寸大小,格式{的M多个子模? <br /><br />下面我们开始我们的PHPE序.<br /><br />先是创徏一个类的实例对?br />//包含q模板类 template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实?<br />$tpl = new Template("template"); <br /><br />//读进三个模板文g的内?分别l变?main", "my_header", "my_footer" <br />$tpl->set_file("main", "third.html"); <br />$tpl->set_file("my_header", "header.html"); <br />$tpl->set_file("my_footer", "footer.html"); <br /><br />//执行my_header,my_footer里的模板变量替换,q把最l结果分别赋l主模板中的header,footer <br />$tpl->parse("header", "my_header"); <br />$tpl->parse("footer", "my_footer"); <br /><br />//然后完成L板内变量的替?q输Z模板分析后的内容 <br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->p("mains"); <br /><br />于是,我们便可以通过查看源文件确信header.html,footer.html两个子模板文件的内容已经被加q主模板里了.<br /><br /><!-- q是面头部 --> <br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> </TITLE> <br /></HEAD> <br /><BODY> <br />下面是一个列?<br /><UL> <br /><!-- BEGIN list --> <br /><li> 的成l是 <br /><!-- END list --> <br /></UL> <br /><!-- q是面脚部 --> <br /><P>author &copy; iwind <br /></BODY> <br /></HTML> <br /><br />你会发现,所有的变量都没?包括我们未赋值的{title},{username},{score}.q是因ؓ我们在创建对象时,W二个参数未讄,而自动采用了"remove"<br />$tpl = new Template("template"); <br />?br />$tpl = new Template("template", "remove"); <br />的效果是一L.<br /><br />如果我们想给q些变量也赋?那么Ҏ和单个模杉K变量的分析方法是一L.<br />//L板内容进变量 <br />$tpl->set_file("main", "third.html"); <br />$tpl->set_file("my_header", "header.html"); <br />$tpl->set_file("my_footer", "footer.html"); <br /><br />//讄子模板header.html里的变量title的?<br />$tpl->set_var("title", "q个是网|?); <br /><br />//以下分析L杉K的块的内?<br />//讄?<br />$tpl->set_block("main", "list", "lists"); <br />$array = array("张三" => 82, "李四" => 90, "王二" => 60, "d" => 77); <br />foreach ($array as $username=>$score) <br />{ <br />    $tpl->set_var("username", $username); <br />    $tpl->set_var("score", $score); <br />    $tpl->parse("lists", "list", true); <br />} <br /><br />所有程序ؓ<br /><?php <br />//包含q模板类 template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实?<br />$tpl = new Template("template"); <br /><br />//整个文件读q来 <br />$tpl->set_file("main", "third.html"); <br />$tpl->set_file("my_header", "header.html"); <br />$tpl->set_file("my_footer", "footer.html"); <br /><br />//讄header.html里的变量title的?<br />$tpl->set_var("title", "q个是网|?); <br /><br />//讄?<br />$tpl->set_block("main", "list", "lists"); <br />$array = array("张三" => 82, "李四" => 90, "王二" => 60, "d" => 77); <br />foreach ($array as $username=>$score) <br />{ <br />$tpl->set_var("username", $username); <br />$tpl->set_var("score", $score); <br />$tpl->parse("lists", "list", true); <br />} <br /><br />//执行my_header,my_footer里的模板变量替换,q把最l结果分别赋l主模板中的header,footer <br />$tpl->parse("header", "my_header"); <br />$tpl->parse("footer", "my_footer"); <br /><br />//完成L板内变量的替?<br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->p("mains"); <br /><br />?> <br /><br />输出的结果ؓ<br /><!-- q是面头部 --> <br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> q个是网|?</TITLE> <br /></HEAD> <br /><BODY> <br />下面是一个列?<br /><UL> <br /><br /><li>张三 的成l是 82 <br /><li>李四 的成l是 90 <br /><li>王二 的成l是 60 <br /><li>d 的成l是 77 <br /></UL> <br /><!-- q是面脚部 --> <br /><P>author &copy; iwind <br /></BODY> <br /></HTML> <br /><br />一切都是我们所期望?<br /><br />在这个程序里,我们?br />$tpl->set_block("main", "list", "lists"); <br />加蝲一个块.其实它的W一个参Cؓ该块所在父变量,如果q个块在header.html?那么恐怕要q样写了<br />$tpl->set_block("my_header", "list", "lists"); <br />但分析方法还是一L.<br /><br />从以往和这节中的例?我们可以看出?定义一个模板变量{var}值的Ҏ是用<br />$tpl->set_var("var_name", "var_value"); <br />但把一个变量的值给另一个变量就需要用parse.<br />$tpl->parse("target_name", "from_name", true); <br />或?br />$tpl->parse("target_name", "from_name", false); <br />使用parse先执行from_name大变量的模板变量的替?然后再把所得结果赋ltarget_name.<br /><br />一个变量{varname}无论在模板的何处(块里?子模杉K),定义的方法都是一L.<br /><br />子模杉Kq可以嵌入新的子模板,UC?多重嵌套",分析的方法都是一L,只是一般用不到.块也可以多重嵌套,而且非常有用,使得模板可以设计的可以很清晰,q就是我们下一节的内容?</div></div></div></div><img src ="http://www.tkk7.com/jackstudio/aggbug/62765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jackstudio/" target="_blank">jackstudio</a> 2006-08-10 12:17 <a href="http://www.tkk7.com/jackstudio/archive/2006/08/10/62765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://cin17.com" target="_blank">ˬִ̼߳Ƶ</a>| <a href="http://116com.com" target="_blank">þþƷ69Ʒ</a>| <a href="http://by7258.com" target="_blank">պһ</a>| <a href="http://hs718.com" target="_blank">ŮƷþþþ</a>| <a href="http://38miao.com" target="_blank">Ƶ߹ۿƵ</a>| <a href="http://jinguwj.com" target="_blank">ɫAVɫһ</a>| <a href="http://hgbookvip.com" target="_blank">ȫѹɫһ</a>| <a href="http://xdxsw.com" target="_blank">ҪWWWѿƵ</a>| <a href="http://chuguo65.com" target="_blank">16Ůڵ</a>| <a href="http://wwwkckc.com" target="_blank">AV߲</a>| <a href="http://kwknc.com" target="_blank">ձaƵ</a>| <a href="http://91ggan.com" target="_blank">޹˾þþƷţӰ</a>| <a href="http://tjbdyx.com" target="_blank">޸һ</a>| <a href="http://9ts9.com" target="_blank">˳ɵӰ</a>| <a href="http://01shanzhai.com" target="_blank">һ߹ۿ</a>| <a href="http://27simnjingmiguan.com" target="_blank">avר</a>| <a href="http://ikybh.com" target="_blank">ҹҹƷƵ</a>| <a href="http://gangxiangli.com" target="_blank">ĻƵ</a>| <a href="http://semaopu.com" target="_blank">ҵС身߿Ѹ </a>| <a href="http://51708695.com" target="_blank">޹ƷߵӰ</a>| <a href="http://8hnbuk14.com" target="_blank">͵͵߶̬ͼ</a>| <a href="http://gachi1151.com" target="_blank">ҹ99Ƶ</a>| <a href="http://czdlglass.com" target="_blank">ѹۿ</a>| <a href="http://wusongtv.com" target="_blank">պƵѿ</a>| <a href="http://grjeans.com" target="_blank">˾Ʒ</a>| <a href="http://helloyp.com" target="_blank">ݲƵ</a>| <a href="http://34007c.com" target="_blank">鶹Ʒѹۿ</a>| <a href="http://3333kkkk.com" target="_blank">ѼƵվ</a>| <a href="http://cpsc-test.com" target="_blank">ձa߹ۿ</a>| <a href="http://kj555888.com" target="_blank">պƵ</a>| <a href="http://wogool.com" target="_blank">ѹۿվ</a>| <a href="http://avxyz.com" target="_blank">avֻ߹ۿ</a>| <a href="http://xyjxnhcl.com" target="_blank">ŷ͵Ʒ </a>| <a href="http://wwwfac37.com" target="_blank">Ʒ༤þþ </a>| <a href="http://kyqp0033.com" target="_blank">jizzjizzƵȫ</a>| <a href="http://gnebs.com" target="_blank">պƷһ</a>| <a href="http://kmrghj.com" target="_blank">պ߸</a>| <a href="http://adcadm.com" target="_blank">˹ƷŮëƬѲ</a>| <a href="http://pj9xx6.com" target="_blank">ҹɫ˽ӰԺ߹ۿ</a>| <a href="http://34007c.com" target="_blank">һ</a>| <a href="http://8xjr.com" target="_blank">޾ƷƷ벻99</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>