<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY &#187; 電腦技術</title>
	<atom:link href="http://blog.wu-boy.com/category/%e9%9b%bb%e8%85%a6%e6%8a%80%e8%a1%93/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.wu-boy.com</link>
	<description>介紹一堆美食日記，生活日記，電腦筆記</description>
	<lastBuildDate>Tue, 27 Jul 2010 14:04:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[Kernel Driver] 撰寫簡易 Timer 機制</title>
		<link>http://blog.wu-boy.com/2010/07/27/2303/</link>
		<comments>http://blog.wu-boy.com/2010/07/27/2303/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 14:04:30 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[Driver]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux Kernel]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2303</guid>
		<description><![CDATA[在底層 Linux Kernel 提供了時序(timing)機制，方便驅動程式設計者所使用，核心是依據硬體發出的『計時器中斷』來追蹤時間的流動狀況。我們可以依據 HZ 的值來設計 Delay 機制，讓驅動程式可以每隔固定一段時間啟動或者是發出訊號，也可以利用 Timer 來讓 LED 閃爍變化，在介紹 Timer API 之前，可以先參考 Linux Kernel: 簡介HZ, tick and jiffies 這篇文章，瞭解一些相關名詞，舉例：如果想知道一秒後的 jiffies 時間，可以寫成底下：
<span class="readmore"><a href="http://blog.wu-boy.com/2010/07/27/2303/" title="[Kernel Driver] 撰寫簡易 Timer 機制" target="_blank">...詳全文（共1659字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>在底層 Linux Kernel 提供了時序(timing)機制，方便驅動程式設計者所使用，核心是依據硬體發出的『計時器中斷』來追蹤時間的流動狀況。我們可以依據 HZ 的值來設計 Delay 機制，讓驅動程式可以每隔固定一段時間啟動或者是發出訊號，也可以利用 Timer 來讓 LED 閃爍變化，在介紹 Timer API 之前，可以先參考 <a href="http://adrianhuang.blogspot.com/2007/10/linux-kernel-hz-tick-and-jiffies.html">Linux Kernel: 簡介HZ, tick and jiffies</a> 這篇文章，瞭解一些相關名詞，舉例：如果想知道一秒後的 jiffies 時間，可以寫成底下：</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#ifdef CONFIG_BMA150_TIMER</span><br />
<span class="co2">#include &lt;linux/timer.h&gt;</span><br />
<span class="co2">#endif</span><br />
j <span class="sy0">=</span> jiffies<span class="sy0">;</span><br />
<span class="coMULTI">/* 一秒之後 */</span><br />
stamp_1 <span class="sy0">=</span> j <span class="sy0">+</span> HZ<span class="sy0">;</span><br />
<span class="coMULTI">/* 半秒之後 */</span><br />
stamp_1 <span class="sy0">=</span> j <span class="sy0">+</span> HZ<span class="sy0">/</span><span class="nu0">2</span><span class="sy0">;</span> <br />
<span class="coMULTI">/* 20秒之後 */</span><br />
stamp_1 <span class="sy0">=</span> j <span class="sy0">+</span> <span class="nu0">20</span><span class="sy0">*</span>HZ<span class="sy0">;</span></div></div>
<h3>Timer API 用法</h3>
<p>筆記一下自己在寫 BOSCH Sensortec 三軸加速偵測器(BMA150 Sensor) Driver 的時候，遇到底層要回報 input event X,Y,Z 到 <a href="http://code.google.com/intl/zh-TW/android/">Android</a> HAL(<a href="http://en.wikipedia.org/wiki/Hardware_abstraction_layer">Hardware abstraction layer</a>)，所以利用 Timer 的機制定時 report 給 Android。</p>
<p>首先宣告：</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#ifdef CONFIG_BMA150_TIMER</span><br />
<span class="co2">#include &lt;linux/timer.h&gt;</span><br />
<span class="co2">#endif</span><br />
<span class="coMULTI">/* 定義 timer_list struct */</span><br />
<span class="co2">#ifdef CONFIG_BMA150_TIMER</span><br />
<span class="kw4">struct</span> timer_list bma150_report_timer<span class="sy0">;</span><br />
<span class="co2">#endif</span></div></div>
<p>在 Driver 內的 bma150_probe 裡面 call function:</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#ifdef CONFIG_BMA150_TIMER</span><br />
&nbsp; bma150_init_timer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co2">#endif</span></div></div>
<p>撰寫 bma150_init_timer 函式：</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#ifdef CONFIG_BMA150_TIMER</span><br />
<span class="kw4">static</span> <span class="kw4">void</span> bma150_init_timer<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span> &nbsp;<br />
&nbsp; D<span class="br0">&#40;</span><span class="st0">&quot;BMA150 init_timer start<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="coMULTI">/* Timer 初始化 */</span><br />
&nbsp; init_timer<span class="br0">&#40;</span><span class="sy0">&amp;</span>bma150_report_timer<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="coMULTI">/* 定義 timer 所執行之函式 */</span><br />
&nbsp; bma150_report_timer.<span class="kw2">function</span> <span class="sy0">=</span> bma150_report<span class="sy0">;</span><br />
&nbsp; <span class="coMULTI">/* 定義 timer 傳入函式之 Data */</span><br />
&nbsp; bma150_report_timer.<span class="me1">data</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">long</span><span class="br0">&#41;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="coMULTI">/* 定義 timer Delay 時間 */</span><br />
&nbsp; bma150_report_timer.<span class="me1">expires</span> <span class="sy0">=</span> jiffies <span class="sy0">+</span> BMA150_REPORT_DELAY_1<span class="sy0">;</span><br />
&nbsp; <span class="coMULTI">/* 啟動 Timer*/</span><br />
&nbsp; add_timer<span class="br0">&#40;</span><span class="sy0">&amp;</span>bma150_report_timer<span class="br0">&#41;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><br />
<span class="co2">#endif</span></div></div>
<p>上述 add_timer 執行之後，會在一秒後執行 bma150_report 函式，執行之後就會停止，所以如果要一直產生迴圈，就必須在 bma150_report 裡面繼續加入 add_timer，改寫如下：</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw4">static</span> <span class="kw4">int</span> bma150_report<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; D<span class="br0">&#40;</span><span class="st0">&quot;appleboy: test timer. <span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co2">#ifdef CONFIG_BMA150_TIMER</span><br />
&nbsp; bma150_report_timer.<span class="me1">expires</span> <span class="sy0">=</span> jiffies <span class="sy0">+</span> BMA150_REPORT_DELAY_2<span class="sy0">;</span><br />
&nbsp; add_timer<span class="br0">&#40;</span><span class="sy0">&amp;</span>bma150_report_timer<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co2">#endif </span><br />
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></div>
<p>我們可以重新定義 expires 時間 <span style="color:green">jiffies + BMA150_REPORT_DELAY_2</span>，就可以一直循環了，要離開 Timer 可以在最後加入 <span style="color:green">deltimer(&#038;bma150_report_timer)</span>，最後就完成簡易的 Timer 功能。</p>
<p>參考：<br />
<a href="http://dragli.blogspot.com/2008/12/addtimer.html">add_timer的使用方法</a><br />
<a href="http://adrianhuang.blogspot.com/2007/10/linux-kernel-hz-tick-and-jiffies.html">Linux Kernel: 簡介HZ, tick and jiffies</a></p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/05/28/2165/" title="[Linux Kernel] built-in vs. module">[Linux Kernel] built-in vs. module (3)</a></li><li><a href="http://blog.wu-boy.com/2010/07/25/2296/" title="[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3)">[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3) (0)</a></li><li><a href="http://blog.wu-boy.com/2010/07/21/2280/" title="[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2).">[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2). (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/21/2231/" title="[Linux Kernel] 撰寫簡單 Hello, World module (part 1).">[Linux Kernel] 撰寫簡單 Hello, World module (part 1). (0)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/07/27/2303/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3)</title>
		<link>http://blog.wu-boy.com/2010/07/25/2296/</link>
		<comments>http://blog.wu-boy.com/2010/07/25/2296/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 08:17:52 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Driver]]></category>
		<category><![CDATA[Linux Kernel]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2296</guid>
		<description><![CDATA[在 Kernel 2.4 或以上版本，在編譯模組完成，要進行 load module 之前，你會發現底下訊息：
# insmod hello-3.o
Warning: loading hello-3.o will taint the kernel: no license
<span class="readmore"><a href="http://blog.wu-boy.com/2010/07/25/2296/" title="[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3)" target="_blank">...詳全文（共2142字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>在 Kernel 2.4 或以上版本，在編譯模組完成，要進行 load module 之前，你會發現底下訊息：</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co0"># insmod hello-3.o</span><br />
Warning: loading hello-3.o will taint the kernel: no license<br />
&nbsp; See http:<span class="sy0">//</span>www.tux.org<span class="sy0">/</span>lkml<span class="sy0">/</span><span class="co0">#export-tainted for information about tainted modules</span></div></div>
<p>很顯然這訊息是要您在 kernel module 裡面加上版權宣告，例如：&#8221;GPL&#8221;，&#8221;GPL v2&#8243;…等來宣告您的 module 並非 open source，利用 <strong><span style="color:green">MODULE_LICENSE()</span></strong> 巨集來宣告程式 License，同樣的，可以用 <strong><span style="color:green">MODULE_DESCRIPTION()</span></strong> 來描述此模組或者是 Driver 的功用跟簡介，以及用 <strong><span style="color:green">MODULE_AUTHOR()</span></strong> 來定義此模組作者，這些巨集都可以在 <span style="color:red">linux/module.h</span> 裡找到，但是這些並非用於 Kernel 本身，如果大家想看範例程式，可以到 <span style="color:red">drivers</span>/ 資料夾底下觀看每一個 Driver 程式，底下是簡單 hello world 範例：</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#include &lt;linux/kernel.h&gt; /* pr_info所需 include 檔案*/</span><br />
<span class="co2">#include &lt;linux/init.h&gt;</span><br />
<span class="co2">#include &lt;linux/module.h&gt; /* 所有 module 巨集需要檔案*/</span><br />
<span class="co2">#include &lt;linux/version.h&gt;</span><br />
<br />
<span class="kw4">static</span> <span class="kw4">int</span> __init hello_init<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; pr_info<span class="br0">&#40;</span><span class="st0">&quot;Hello, world appleboy<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; pr_info<span class="br0">&#40;</span><span class="st0">&quot;The process is <span class="es1">\&quot;</span>%s<span class="es1">\&quot;</span> (pid %i)<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> current<span class="sy0">-&gt;</span>comm<span class="sy0">,</span> current<span class="sy0">-&gt;</span>pid<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw4">static</span> <span class="kw4">void</span> __exit hello_exit<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; printk<span class="br0">&#40;</span>KERN_INFO <span class="st0">&quot;Goodbye<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
MODULE_DESCRIPTION<span class="br0">&#40;</span><span class="st0">&quot;Hello World !!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="coMULTI">/* 此程式介紹與描述*/</span><br />
MODULE_AUTHOR<span class="br0">&#40;</span><span class="st0">&quot;Bo-Yi Wu &lt;appleboy.tw AT gmail.com&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="coMULTI">/* 此程式作者*/</span><br />
MODULE_LICENSE<span class="br0">&#40;</span><span class="st0">&quot;GPL&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="coMULTI">/* 程式 License*/</span><br />
module_init<span class="br0">&#40;</span>hello_init<span class="br0">&#41;</span><span class="sy0">;</span><br />
module_exit<span class="br0">&#40;</span>hello_exit<span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>在 linux/module.h 裡頭，可以找到 MODULE_LICENSE 可定義的 License</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/*<br />
&nbsp;* The following license idents are currently accepted as indicating free<br />
&nbsp;* software modules<br />
&nbsp;*<br />
&nbsp;*&nbsp; &quot;GPL&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [GNU Public License v2 or later]<br />
&nbsp;*&nbsp; &quot;GPL v2&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [GNU Public License v2]<br />
&nbsp;*&nbsp; &quot;GPL and additional rights&quot; [GNU Public License v2 rights and more]<br />
&nbsp;*&nbsp; &quot;Dual BSD/GPL&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [GNU Public License v2<br />
&nbsp;*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;or BSD license choice]<br />
&nbsp;*&nbsp; &quot;Dual MIT/GPL&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [GNU Public License v2<br />
&nbsp;*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;or MIT license choice]<br />
&nbsp;*&nbsp; &quot;Dual MPL/GPL&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [GNU Public License v2<br />
&nbsp;*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;or Mozilla license choice]<br />
&nbsp;*<br />
&nbsp;* The following other idents are available<br />
&nbsp;*<br />
&nbsp;*&nbsp; &quot;Proprietary&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [Non free products]<br />
&nbsp;*<br />
&nbsp;* There are dual licensed components, but when running with Linux it is the<br />
&nbsp;* GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL<br />
&nbsp;* is a GPL combined work.<br />
&nbsp;*<br />
&nbsp;* This exists for several reasons<br />
&nbsp;* 1. &nbsp; So modinfo can show license info for users wanting to vet their setup <br />
&nbsp;*&nbsp; is free<br />
&nbsp;* 2. &nbsp; So the community can ignore bug reports including proprietary modules<br />
&nbsp;* 3. &nbsp; So vendors can do likewise based on their own policies<br />
&nbsp;*/</span></div></div>
<p>巨集 define:</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#define MODULE_LICENSE(_license) MODULE_INFO(license, _license)</span><br />
<br />
<span class="coMULTI">/*<br />
&nbsp;* Author(s), use &quot;Name &lt;email&gt;&quot; or just &quot;Name&quot;, for multiple<br />
&nbsp;* authors use multiple MODULE_AUTHOR() statements/lines.<br />
&nbsp;*/</span><br />
<span class="co2">#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)</span><br />
<br />
<span class="coMULTI">/* What your module does. */</span><br />
<span class="co2">#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)</span></div></div>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/07/27/2303/" title="[Kernel Driver] 撰寫簡易 Timer 機制">[Kernel Driver] 撰寫簡易 Timer 機制 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/07/21/2280/" title="[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2).">[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2). (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/21/2231/" title="[Linux Kernel] 撰寫簡單 Hello, World module (part 1).">[Linux Kernel] 撰寫簡單 Hello, World module (part 1). (0)</a></li><li><a href="http://blog.wu-boy.com/2010/05/28/2165/" title="[Linux Kernel] built-in vs. module">[Linux Kernel] built-in vs. module (3)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/07/25/2296/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2).</title>
		<link>http://blog.wu-boy.com/2010/07/21/2280/</link>
		<comments>http://blog.wu-boy.com/2010/07/21/2280/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:04:16 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Driver]]></category>
		<category><![CDATA[Linux Kernel]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2280</guid>
		<description><![CDATA[再看此篇之前，可以先閱讀作者先前寫的：『[Linux Kernel Driver] 撰寫簡單 Hello, World module (part 1).』，今天要介紹 Driver 的 init module 區別，在 Kernel 2.4 版本，您可以自行定義 init 跟 cleanup 函式，他們不再被個別稱為 init_module() 和 cleanup_module()，現在都使用 module_init() 和 module_exit() 兩大巨集，這兩函式被定義在 linux/init.h 檔案裡面，所以在寫程式務必將其 include 喔，另外一個核心模組(MODULE_LICENSE)，用於讓核心知道此模組遵守自由授權條款，若沒這項宣告，核心會跟您抱怨的喔，底下為範例：
<span class="readmore"><a href="http://blog.wu-boy.com/2010/07/21/2280/" title="[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2)." target="_blank">...詳全文（共1766字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>再看此篇之前，可以先閱讀作者先前寫的：『[<a href="http://blog.wu-boy.com/2010/06/21/2231/">Linux Kernel Driver] 撰寫簡單 Hello, World module (part 1).</a>』，今天要介紹 Driver 的 init module 區別，在 Kernel 2.4 版本，您可以自行定義 init 跟 cleanup 函式，他們不再被個別稱為 <span style="color:green">init_module()</span> 和 <span style="color:green">cleanup_module()</span>，現在都使用 <span style="color:green"><strong>module_init()</strong></span> 和 <span style="color:green"><strong>module_exit()</strong></span> 兩大巨集，這兩函式被定義在 <span style="color:red">linux/init.h</span> 檔案裡面，所以在寫程式務必將其 include 喔，另外一個核心模組(MODULE_LICENSE)，用於讓核心知道此模組遵守自由授權條款，若沒這項宣告，核心會跟您抱怨的喔，底下為範例：</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#include &lt;linux/kernel.h&gt; /* pr_info所需 include 檔案*/</span><br />
<span class="co2">#include &lt;linux/init.h&gt;</span><br />
<span class="co2">#include &lt;linux/module.h&gt; /* 所有 module 需要檔案*/</span><br />
<span class="co2">#include &lt;linux/version.h&gt;</span><br />
<br />
MODULE_DESCRIPTION<span class="br0">&#40;</span><span class="st0">&quot;Hello World !!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
MODULE_AUTHOR<span class="br0">&#40;</span><span class="st0">&quot;Bo-Yi Wu &lt;appleboy.tw AT gmail.com&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
MODULE_LICENSE<span class="br0">&#40;</span><span class="st0">&quot;GPL&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw4">static</span> <span class="kw4">int</span> __init hello_init<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; pr_info<span class="br0">&#40;</span><span class="st0">&quot;Hello, world appleboy<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; pr_info<span class="br0">&#40;</span><span class="st0">&quot;The process is <span class="es1">\&quot;</span>%s<span class="es1">\&quot;</span> (pid %i)<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> current<span class="sy0">-&gt;</span>comm<span class="sy0">,</span> current<span class="sy0">-&gt;</span>pid<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw4">static</span> <span class="kw4">void</span> __exit hello_exit<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; printk<span class="br0">&#40;</span>KERN_INFO <span class="st0">&quot;Goodbye<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
module_init<span class="br0">&#40;</span>hello_init<span class="br0">&#41;</span><span class="sy0">;</span><br />
module_exit<span class="br0">&#40;</span>hello_exit<span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>編譯過程，可以自行修改 Makefile，可以打開 <span style="color:green">kernel/android-2.6.29/drivers/i2c/chips/Makefile</span> 參考範例，您會發現很多類似底下寫法：</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">obj-$<span class="br0">&#40;</span>CONFIG_TWL4030_POWEROFF<span class="br0">&#41;</span> &nbsp;+= twl4030-poweroff.o<br />
obj-$<span class="br0">&#40;</span>CONFIG_TWL4030_MADC<span class="br0">&#41;</span> &nbsp;+= twl4030-madc.o<br />
obj-$<span class="br0">&#40;</span>CONFIG_RTC_X1205_I2C<span class="br0">&#41;</span> += x1205.o<br />
obj-$<span class="br0">&#40;</span>CONFIG_SENSORS_BOSCH_BMA150<span class="br0">&#41;</span> &nbsp;+= bma150.o</div></div>
<p>如果要編譯成 module 可以設定成 <span style="color:green">obj-m += bma150.o</span>，編譯到 Kernel image，則會寫成 <span style="color:green">obj-y += bma150.o</span>，然而 $(CONFIG_SENSORS_BOSCH_BMA150) 是從 <strong>make menuconfig</strong> 設定，當然為什麼 menuconfig 會出現此設定，那就要從 <span style="color:green">kernel/android-2.6.29/drivers/i2c/chips/Kconfig</span> 裡面加入 <span style="color:green">CONFIG_SENSORS_BOSCH_BMA150</span> 設定， 選好之後，觀看 Kernel 資料夾底下的 .config 內容，看到 <span style="color:green"><strong>CONFIG_SENSORS_BOSCH_BMA150=y</strong></span>，這樣就正確了。</p>
<h3>What is different of <strong>__init</strong> and <strong>__exit</strong>?</h3>
<p>在寫 G-Senser Driver 時候，您會發現 static int <span style="color:red">__init</span> BMA150_init(void) 跟 static void <span style="color:red">__exit</span> BMA150_exit(void)，跟平常寫 C 語言宣告函式不一樣吧，這兩個巨集分別有不同意義喔，當然也可以將 span style=&#8221;color:red&#8221;>__init</span> 跟 <span style="color:red">__exit</span> 拿掉，這不會影響 Driver 的編譯，但是會影響記憶體的優化，Driver 啟動時會呼叫 BMA150_init 函式，如果有加上 <span style="color:red">__init</span>，當此 init function 執行完，會將記憶體 Release 給系統，這是針對 built-in 的方式才適用，如果是編譯成模組方式，則不會有此功能，然而 <span style="color:red">__exit</span> 是 Driver 結束後會呼叫的 function，但是跟 __init 剛好功能相反，在 built-in 的 Kernel 映像檔並不會執行到 __exit，編譯成模組才會有釋放記憶體效果，這兩巨集可以參考 <span style="color:green">linux/init.h</span> 檔案。</p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/07/27/2303/" title="[Kernel Driver] 撰寫簡易 Timer 機制">[Kernel Driver] 撰寫簡易 Timer 機制 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/07/25/2296/" title="[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3)">[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3) (0)</a></li><li><a href="http://blog.wu-boy.com/2010/06/21/2231/" title="[Linux Kernel] 撰寫簡單 Hello, World module (part 1).">[Linux Kernel] 撰寫簡單 Hello, World module (part 1). (0)</a></li><li><a href="http://blog.wu-boy.com/2010/05/28/2165/" title="[Linux Kernel] built-in vs. module">[Linux Kernel] built-in vs. module (3)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/07/21/2280/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ProFTPD UseEncoding 繁體中文亂碼解決 Localization</title>
		<link>http://blog.wu-boy.com/2010/07/07/2276/</link>
		<comments>http://blog.wu-boy.com/2010/07/07/2276/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 08:07:13 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[proftpd]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2276</guid>
		<description><![CDATA[ProFTPD 一直都是我最喜歡使用的 FTP 伺服器，設定方式簡單淺顯易懂，最近在用 PSPad 寫程式，發現使用內建 FTP 功能時候，連不上 FreeBSD 架設的 ProFTPD，連線過程出現許多亂碼，所以造成 PSPad 斷線出現錯誤，解決方式就是利用 mod_lang 模組，設定 UseEncoding 讓系統可以顯示 Big5 中文編碼，FreeBSD Ports 請勾選
<span class="readmore"><a href="http://blog.wu-boy.com/2010/07/07/2276/" title="ProFTPD UseEncoding 繁體中文亂碼解決 Localization" target="_blank">...詳全文（共618字）</a></span>]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm5.static.flickr.com/4096/4770121725_6a997912c6_o.png" alt="Proftpd" /><br />
<a href="http://www.proftpd.org/">ProFTPD</a> 一直都是我最喜歡使用的 FTP 伺服器，設定方式簡單淺顯易懂，最近在用 <a href="http://www.pspad.com/">PSPad</a> 寫程式，發現使用內建 FTP 功能時候，連不上 <a href="http://www.freebsd.org">FreeBSD</a> 架設的 ProFTPD，連線過程出現許多亂碼，所以造成 PSPad 斷線出現錯誤，解決方式就是利用 <a href="http://www.proftpd.org/docs/modules/mod_lang.html">mod_lang</a> 模組，設定 <a href="http://www.proftpd.org/docs/modules/mod_lang.html#UseEncoding">UseEncoding</a> 讓系統可以顯示 Big5 中文編碼，FreeBSD Ports 請勾選</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="br0">&#91;</span>X<span class="br0">&#93;</span> NLSUOTA Use nls <span class="br0">&#40;</span>builds mod_lang<span class="br0">&#41;</span></div></div>
<p>自行編譯請按照底下步驟</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">.<span class="sy0">/</span>configure <span class="re5">--enable-nls</span><br />
<span class="kw2">make</span><br />
<span class="kw2">make</span> <span class="kw2">install</span></div></div>
<h3>UseEncoding 設定</h3>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">Syntax: UseEncoding on<span class="sy0">|</span>off<span class="sy0">|</span>local-charset client-charset<br />
Default: None<br />
Context: <span class="st0">&quot;server config&quot;</span>, <span class="sy0">&lt;</span>VirtualHost<span class="sy0">&gt;</span>, <span class="sy0">&lt;</span>Global<span class="sy0">&gt;</span><br />
Module: mod_lang<br />
Compatibility: 1.3.2rc1</div></div>
<p>在 1.3.2rc1 版本之後才有支援，請複製底下設定，貼到 proftpd.conf</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co0"># 简体中文環境</span><br />
UseEncoding UTF-<span class="nu0">8</span> GBK<br />
<span class="co0"># 繁体中文環境</span><br />
UseEncoding UTF-<span class="nu0">8</span> Big5</div></div>
<p>Reference:<br />
<a href="http://www.proftpd.org/docs/modules/mod_lang.html">ProFTPD module mod_lang</a><br />
<a href="http://wanglq.blog.51cto.com/783560/340741">centos上解決proftp中文亂碼問題</a></p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/06/23/2240/" title="[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9">[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9 (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/26/2087/" title="Apache 取得透過 Reverse Proxy (Varnish) 的 Client 真正 IP (mod_rpaf)">Apache 取得透過 Reverse Proxy (Varnish) 的 Client 真正 IP (mod_rpaf) (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/16/2050/" title="[Vim] 想套用 *.php syntax 顏色於 *.ros">[Vim] 想套用 *.php syntax 顏色於 *.ros (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/11/2041/" title="[FreeBSD] DenyHosts 設定在 hosts.allow 注意事項">[FreeBSD] DenyHosts 設定在 hosts.allow 注意事項 (0)</a></li><li><a href="http://blog.wu-boy.com/2010/01/08/1950/" title="[FreeBSD] Fanout and Fanterm Tool to run commands on multiple machines">[FreeBSD] Fanout and Fanterm Tool to run commands on multiple machines (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/29/1918/" title="[Git] how to remove file and commit from history(如何移除 commit 歷史紀錄)">[Git] how to remove file and commit from history(如何移除 commit 歷史紀錄) (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/12/1901/" title="[UNIX] Vim 命令圖解說明">[UNIX] Vim 命令圖解說明 (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/10/1894/" title="[FreeBSD] freebsd kernel: fxp0: link state changed to DOWN / UP">[FreeBSD] freebsd kernel: fxp0: link state changed to DOWN / UP (0)</a></li><li><a href="http://blog.wu-boy.com/2009/11/18/1843/" title="[FreeBSD] port committer 快速建立 pkg-plist">[FreeBSD] port committer 快速建立 pkg-plist (1)</a></li><li><a href="http://blog.wu-boy.com/2009/11/03/1781/" title="[Perl&#038;PHP] time() and Class::Date 日期轉換運算">[Perl&#038;PHP] time() and Class::Date 日期轉換運算 (1)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/07/07/2276/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[phpBB3] BBCode [url] Tag 支援中文網址</title>
		<link>http://blog.wu-boy.com/2010/06/30/2254/</link>
		<comments>http://blog.wu-boy.com/2010/06/30/2254/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 12:05:07 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[phpBB3]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2254</guid>
		<description><![CDATA[在 phpBB2 的時候就有發現這問題了，當時並沒有想去解決這問題，然而至今到了 phpBB3，依然出現這問題，不過我想這是因為中文網址的盛行，以及像 Wiki 之類都會有中文標籤，例如：一分鐘教室-userChrome.css，解決方法可以透過 urlencode 函式來處理掉網址編碼問題，在 phpBB 處理文章儲存，會先經過 bbcode 的處理，將 [b] [url] [img] 等標籤，加上一組 bbcode uid 來代表這篇文章所使用的全部 bbcode tag，整理文章處理過程如下
<span class="readmore"><a href="http://blog.wu-boy.com/2010/06/30/2254/" title="[phpBB3] BBCode [url] Tag 支援中文網址" target="_blank">...詳全文（共8489字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>在 phpBB2 的時候就有發現這問題了，當時並沒有想去解決這問題，然而至今到了 <a href="http://www.phpbb.com/">phpBB3</a>，依然出現這問題，不過我想這是因為中文網址的盛行，以及像 <a href="http://en.wikipedia.org/wiki/Wiki">Wiki</a> 之類都會有中文標籤，例如：<a href="http://wiki.moztw.org/Firefox_一分鐘教室-userChrome.css">一分鐘教室-userChrome.css</a>，解決方法可以透過 <a href="http://php.net/manual/en/function.urlencode.php">urlencode</a> 函式來處理掉網址編碼問題，在 phpBB 處理文章儲存，會先經過 bbcode 的處理，將 [b] [url] [img] 等標籤，加上一組 bbcode uid 來代表這篇文章所使用的全部 bbcode tag，整理文章處理過程如下</p>
<p>1. <span style="color:green"><strong>開始找尋文章內容之 [b] [url] [img] &#8230; 等 Tag</strong></span></p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcodes</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="st_h">'code'</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">8</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[code(?:=([a-z]+))?\](.+\[/code\])#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_code('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'quote'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[quote(?:=&amp;quot;(.*?)&amp;quot;)?\](.+)\[/quote\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_quote('<span class="es1">\$</span>0')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'attachment'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">12</span><span class="sy0">,</span> <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[attachment=([0-9]+)\](.*?)\[/attachment\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_attachment('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'b'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[b\](.*?)\[/b\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_strong('<span class="es1">\$</span>1')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'i'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">2</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[i\](.*?)\[/i\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_italic('<span class="es1">\$</span>1')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'url'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">3</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[url(=(.*))?\](.*)\[/url\]#iUe'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;validate_url('<span class="es1">\$</span>2', '<span class="es1">\$</span>3')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'img'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">4</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[img\](.*)\[/img\]#iUe'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_img('<span class="es1">\$</span>1')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'size'</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">5</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[size=([\-\+]?\d+)\](.*?)\[/size\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_size('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'color'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">6</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_color('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'u'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">7</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[u\](.*?)\[/u\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_underline('<span class="es1">\$</span>1')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'list'</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">9</span><span class="sy0">,</span>&nbsp; <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[list(?:=(?:[a-z0-9]|disc|circle|square))?].*\[/list]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_parse_list('<span class="es1">\$</span>0')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'email'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[email=?(.*?)?\](.*?)\[/email\]#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;validate_email('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'flash'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'bbcode_id'</span> <span class="sy0">=&gt;</span> <span class="nu0">11</span><span class="sy0">,</span> <span class="st_h">'regexp'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'#\[flash=([0-9]+),([0-9]+)\](.*?)\[/flash\]#ie'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_flash('<span class="es1">\$</span>1', '<span class="es1">\$</span>2', '<span class="es1">\$</span>3')&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>2. <span style="color:green"><strong>檢查 url, email, html 等驗證，並且轉換成 [url="xxxx":$bbcode_uid] &#8230; 等存入資料庫</strong></span></p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> bbcode_specialchars<span class="br0">&#40;</span><span class="re0">$text</span><span class="br0">&#41;</span><br />
<span class="kw2">function</span> bbcode_color<span class="br0">&#40;</span><span class="re0">$stx</span><span class="sy0">,</span> <span class="re0">$in</span><span class="br0">&#41;</span><br />
<span class="kw2">function</span> bbcode_strong<span class="br0">&#40;</span><span class="re0">$in</span><span class="br0">&#41;</span><br />
<span class="co4">/**<br />
* Parse i tag<br />
*/</span><br />
<span class="kw2">function</span> bbcode_italic<span class="br0">&#40;</span><span class="re0">$in</span><span class="br0">&#41;</span></div></div>
<p>&#8230;. 等驗證，其中比較要注意的就是 url 驗證函式 <span style="color:green">function validate_url($var1, $var2)</span>，待會仔細祥解。<br />
3. <span style="color:green"><strong>讀取資料庫將 bbcode 轉換成 html 形式</strong></span><br />
先讀取 <span style="color:green">styles/XXXX/template/bbcode.html</span> 檔案，比對文章內容正規語法：</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px;height:300px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">switch</span> <span class="br0">&#40;</span><span class="re0">$bbcode_id</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">0</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/quote:$uid]'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'quote_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[quote(?:=&amp;quot;(.*?)&amp;quot;)?:$uid\]((?!\[quote(?:=&amp;quot;.*?&amp;quot;)?:$uid\]).)?#ise'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_second_pass_quote('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">1</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[b:$uid]'</span>&nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'b_open'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/b:$uid]'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'b_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">2</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[i:$uid]'</span>&nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'i_open'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/i:$uid]'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'i_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">3</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[url:$uid\]((.*?))\[/url:$uid\]#s'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'url'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[url=([^\[]+?):$uid\](.*?)\[/url:$uid\]#s'</span> &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'url'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">4</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">optionget</span><span class="br0">&#40;</span><span class="st_h">'viewimg'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[img:$uid\](.*?)\[/img:$uid\]#s'</span> &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'img'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[img:$uid\](.*?)\[/img:$uid\]#s'</span> &nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st_h">'$2'</span><span class="sy0">,</span> <span class="st_h">'[ img ]'</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'url'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">5</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[size=([\-\+]?\d+):$uid\](.*?)\[/size:$uid\]#s'</span>&nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'size'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">6</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+):$uid\](.*?)\[/color:$uid\]!is'</span> &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'color'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">7</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[u:$uid]'</span>&nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'u_open'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/u:$uid]'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'u_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">8</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[code(?:=([a-z]+))?:$uid\](.*?)\[/code:$uid\]#ise'</span> &nbsp; <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_second_pass_code('<span class="es1">\$</span>1', '<span class="es1">\$</span>2')&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">9</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#(\[\/?(list|\*):[mou]?:?$uid\])[\n]{1}#'</span>&nbsp; <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>1&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#(\[list=([^\[]+):$uid\])[\n]{1}#'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>1&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[list=([^\[]+):$uid\]#e'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es1">\$</span>this-&gt;bbcode_list('<span class="es1">\$</span>1')&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[list:$uid]'</span> &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'ulist_open_default'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/list:u:$uid]'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'ulist_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/list:o:$uid]'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'olist_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[*:$uid]'</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'listitem'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/*:$uid]'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'listitem_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/*:m:$uid]'</span> &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'listitem_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">10</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[email:$uid\]((.*?))\[/email:$uid\]#is'</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'email'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[email=([^\[]+):$uid\](.*?)\[/email:$uid\]#is'</span> &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'email'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">11</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">optionget</span><span class="br0">&#40;</span><span class="st_h">'viewflash'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'flash'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st_h">'$1'</span><span class="sy0">,</span> <span class="st_h">'$3'</span><span class="sy0">,</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st_h">'$2'</span><span class="sy0">,</span> <span class="st_h">'[ flash ]'</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'url'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">12</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'[/attachment:$uid]'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'inline_attachment_close'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span>&nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'#\[attachment=([0-9]+):$uid\]#'</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="st_h">'inline_attachment_open'</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">default</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">template_bitfield</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// The bbcode requires a custom template to be loaded</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$bbcode_tpl</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_tpl</span><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'bbcode_tag'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$bbcode_id</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// For some reason, the required template seems not to be available, use the default template</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$bbcode_tpl</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_replace'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ? <span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_replace'</span><span class="br0">&#93;</span> <span class="sy0">:</span> <span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'bbcode_tpl'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// In order to use templates with custom bbcodes we need</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// to replace all {VARS} to corresponding backreferences</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Note that backreferences are numbered from bbcode_match</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st_h">'/\{(URL|LOCAL_URL|EMAIL|TEXT|SIMPLETEXT|INTTEXT|IDENTIFIER|COLOR|NUMBER)[0-9]*\}/'</span><span class="sy0">,</span> <span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'bbcode_match'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$m</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$m</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="kw1">as</span> <span class="re0">$i</span> <span class="sy0">=&gt;</span> <span class="re0">$tok</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$bbcode_tpl</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="re0">$tok</span><span class="sy0">,</span> <span class="st_h">'$'</span> <span class="sy0">.</span> <span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$bbcode_tpl</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Default template</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$bbcode_tpl</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_replace'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ? <span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_replace'</span><span class="br0">&#93;</span> <span class="sy0">:</span> <span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'bbcode_tpl'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Replace {L_*} lang strings</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$bbcode_tpl</span> <span class="sy0">=</span> <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="st_h">'/{L_([A-Z_]+)}/e'</span><span class="sy0">,</span> <span class="st0">&quot;(!empty(<span class="es1">\$</span>user-&gt;lang['<span class="es1">\$</span>1'])) ? <span class="es1">\$</span>user-&gt;lang['<span class="es1">\$</span>1'] : ucwords(strtolower(str_replace('_', ' ', '<span class="es1">\$</span>1')))&quot;</span><span class="sy0">,</span> <span class="re0">$bbcode_tpl</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_replace'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// The custom BBCode requires second-pass pattern replacements</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'preg'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_match'</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="re0">$bbcode_tpl</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'str'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="re0">$rowset</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'second_pass_match'</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="re0">$bbcode_tpl</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_cache</span><span class="br0">&#91;</span><span class="re0">$bbcode_id</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></div>
<p>接下來將 bbcode 轉換成 html，用 bbcode_tpl() 函式即可，這樣就可以完整顯示出文章。</p>
<h3><strong>=========== 正文開始 ===========</strong></h3>
<p>在驗證文章內容全部 [url(=$var1)]$var2[/url] 標籤，會經過 <span style="color:green">get_preg_expression</span>(&#8217;url&#8217;) 這函式的驗證，看 url 是否合法，當然如果網址列有中文就不可能通過，所以必須在網址驗證之前，把網址編碼過，通過驗證之後再把網址解碼，這樣就沒問題了，底下為安裝步驟</p>
<p>打開 <span style="color:green"><strong>includes/message_parser.php</strong></span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> validate_url<span class="br0">&#40;</span><span class="re0">$var1</span><span class="sy0">,</span> <span class="re0">$var2</span><span class="br0">&#41;</span></div></div>
<p>前面加入</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co4">/**<br />
* &nbsp;url encode<br />
*<br />
* @param string $string http url<br />
*/</span><br />
<br />
<span class="kw2">function</span> encode_url<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$entities</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'%21'</span><span class="sy0">,</span> <span class="st_h">'%2A'</span><span class="sy0">,</span> <span class="st_h">'%27'</span><span class="sy0">,</span> <span class="st_h">'%28'</span><span class="sy0">,</span> <span class="st_h">'%29'</span><span class="sy0">,</span> <span class="st_h">'%3B'</span><span class="sy0">,</span> <span class="st_h">'%3A'</span><span class="sy0">,</span> <span class="st_h">'%40'</span><span class="sy0">,</span> <span class="st_h">'%26'</span><span class="sy0">,</span> <span class="st_h">'%3D'</span><span class="sy0">,</span> <span class="st_h">'%2B'</span><span class="sy0">,</span> <span class="st_h">'%24'</span><span class="sy0">,</span> <span class="st_h">'%2C'</span><span class="sy0">,</span> <span class="st_h">'%2F'</span><span class="sy0">,</span> <span class="st_h">'%3F'</span><span class="sy0">,</span> <span class="st_h">'%25'</span><span class="sy0">,</span> <span class="st_h">'%23'</span><span class="sy0">,</span> <span class="st_h">'%5B'</span><span class="sy0">,</span> <span class="st_h">'%5D'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$replacements</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'!'</span><span class="sy0">,</span> <span class="st_h">'*'</span><span class="sy0">,</span> <span class="st0">&quot;'&quot;</span><span class="sy0">,</span> <span class="st0">&quot;(&quot;</span><span class="sy0">,</span> <span class="st0">&quot;)&quot;</span><span class="sy0">,</span> <span class="st0">&quot;;&quot;</span><span class="sy0">,</span> <span class="st0">&quot;:&quot;</span><span class="sy0">,</span> <span class="st0">&quot;@&quot;</span><span class="sy0">,</span> <span class="st0">&quot;&amp;&quot;</span><span class="sy0">,</span> <span class="st0">&quot;=&quot;</span><span class="sy0">,</span> <span class="st0">&quot;+&quot;</span><span class="sy0">,</span> <span class="st0">&quot;$&quot;</span><span class="sy0">,</span> <span class="st0">&quot;,&quot;</span><span class="sy0">,</span> <span class="st0">&quot;/&quot;</span><span class="sy0">,</span> <span class="st0">&quot;?&quot;</span><span class="sy0">,</span> <span class="st0">&quot;%&quot;</span><span class="sy0">,</span> <span class="st0">&quot;#&quot;</span><span class="sy0">,</span> <span class="st0">&quot;[&quot;</span><span class="sy0">,</span> <span class="st0">&quot;]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="re0">$entities</span><span class="sy0">,</span> <span class="re0">$replacements</span><span class="sy0">,</span> <a href="http://www.php.net/urlencode"><span class="kw3">urlencode</span></a><span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></div>
<p>找尋 <span style="color:green"><strong>validate_url</strong></span> 函式</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="re0">$url</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$var1</span><span class="br0">&#41;</span> ? <span class="re0">$var1</span> <span class="sy0">:</span> <span class="re0">$var2</span><span class="sy0">;</span></div></div>
<p>後面加入</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">// encode url </span><br />
<span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">encode_url</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">return</span> <span class="br0">&#40;</span><span class="re0">$var1</span><span class="br0">&#41;</span> ? <span class="st_h">'[url='</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_specialchars</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">':'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span> <span class="sy0">.</span> <span class="re0">$var2</span> <span class="sy0">.</span> <span class="st_h">'[/url:'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span> <span class="sy0">:</span> <span class="st_h">'[url:'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_specialchars</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'[/url:'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span><span class="sy0">;</span></div></div>
<p>取代</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">return</span> <span class="br0">&#40;</span><span class="re0">$var1</span><span class="br0">&#41;</span> ? <span class="st_h">'[url='</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_specialchars</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">':'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span> <span class="sy0">.</span> <span class="re0">$var2</span> <span class="sy0">.</span> <span class="st_h">'[/url:'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span> <span class="sy0">:</span> <span class="st_h">'[url:'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span> <span class="sy0">.</span> <a href="http://www.php.net/urldecode"><span class="kw3">urldecode</span></a><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_specialchars</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'[/url:'</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bbcode_uid</span> <span class="sy0">.</span> <span class="st_h">']'</span><span class="sy0">;</span></div></div>
<p>測試結果，請參考此網址：<a href="http://goo.gl/y4Rz">Re: 討論區判斷含中文鏈結的 bug</a></p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/06/13/2213/" title="[phpBB3 外掛] 根據使用者文章數目限制簽名檔顯示">[phpBB3 外掛] 根據使用者文章數目限制簽名檔顯示 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/10/2203/" title="[教學] phpBB3 使用者簽名檔 url 連結加上 rel=&#8221;nofollow&#8221;  ">[教學] phpBB3 使用者簽名檔 url 連結加上 rel=&#8221;nofollow&#8221;   (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/23/2240/" title="[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9">[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9 (0)</a></li><li><a href="http://blog.wu-boy.com/2010/06/07/2182/" title="[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter">[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/21/2054/" title="[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇)">[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇) (8)</a></li><li><a href="http://blog.wu-boy.com/2009/12/30/1920/" title="[PHP Framework] How to implement Plurk API in CodeIgniter">[PHP Framework] How to implement Plurk API in CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/24/1913/" title="[PHP] Release 噗浪 php-plurk-api 1.2 Beta.">[PHP] Release 噗浪 php-plurk-api 1.2 Beta. (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/06/1887/" title="PHP+MySQL 環境下 SQL Injection 攻防戰">PHP+MySQL 環境下 SQL Injection 攻防戰 (4)</a></li><li><a href="http://blog.wu-boy.com/2009/11/03/1781/" title="[Perl&#038;PHP] time() and Class::Date 日期轉換運算">[Perl&#038;PHP] time() and Class::Date 日期轉換運算 (1)</a></li><li><a href="http://blog.wu-boy.com/2009/10/26/1757/" title="[CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼">[CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼 (1)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/06/30/2254/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[FreeBSD] update apache -&gt; 2.2.15, PHP -&gt; 5.3.2, and MySQL downgrade to 5.1.9</title>
		<link>http://blog.wu-boy.com/2010/06/23/2240/</link>
		<comments>http://blog.wu-boy.com/2010/06/23/2240/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 05:46:34 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2240</guid>
		<description><![CDATA[昨天升級了 FreeBSD 的 Apache, PHP, and MySQL，遇到很多地雷阿，最多的就是 PHP 的部份，因為本來自己使用 5.2.11 版本，但是在 commit port 的時候發生去裝 5.3.2 版本，所以就直接砍掉全部重練，先是遇到 MySQL 問題，原先在 database/mysql60-server 已經被 FreeBSD 移除，任何關於 mysql60 的相關 port 都被 remove 掉了，只好 downgrade 到 mysql 5.1.48 版本，移除同時順手把 apache PHP 相關都拿掉了。
<span class="readmore"><a href="http://blog.wu-boy.com/2010/06/23/2240/" title="[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9" target="_blank">...詳全文（共2543字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>昨天升級了 <a href="http://www.freebsd.org">FreeBSD</a> 的 Apache, <a href="http://www.php.net">PHP</a>, and <a href="http://www.mysql.com/">MySQL</a>，遇到很多地雷阿，最多的就是 PHP 的部份，因為本來自己使用 5.2.11 版本，但是在 commit port 的時候發生去裝 5.3.2 版本，所以就直接砍掉全部重練，先是遇到 MySQL 問題，原先在 database/mysql60-server 已經被 FreeBSD 移除，任何關於 mysql60 的相關 port 都被 remove 掉了，只好 downgrade 到 mysql 5.1.48 版本，移除同時順手把 apache PHP 相關都拿掉了。</p>
<h3>移除 apache mysql php 相關 ports</h3>
<p>-rf 依序找尋相關 Mysql ports 移除</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">pkg_deinstall <span class="re5">-rf</span> mysql60-server</div></div>
<p>接下來安裝 MySQL 5.1.48 Server and Client，可以找到在 <span style="color:green">databases/mysql51-server</span> and <span style="color:green">databases/mysql51-client</span>，直接安裝即可</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>ports<span class="sy0">/</span>databases<span class="sy0">/</span>mysql51-server <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> <span class="kw2">install</span></div></div>
<p>安裝 Apache 2.2.15</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>ports<span class="sy0">/</span>www<span class="sy0">/</span>apache22 <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> <span class="re2">WITH_MPM</span>=worker <span class="kw2">install</span></div></div>
<p>安裝 PHP 5.3.2，FreeBSD 把 5.2.X 跟 5.3.X 分開不同資料夾 <span style="color:green">lang/php5</span>, <span style="color:green">lang/php52</span>，extension 也是分成兩個，所以要安裝 5.2 版本也是可以的</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>ports<span class="sy0">/</span>lang<span class="sy0">/</span>php5 <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> <span class="kw2">install</span><br />
<span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>ports<span class="sy0">/</span>lang<span class="sy0">/</span>php5-extensions<span class="sy0">/</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> <span class="kw2">install</span></div></div>
<p>以上安裝好，就是苦難的開始，首先 MySQL 從原本的 6.0.9 降到 5.1.48，造成所有資料庫無法讀取，也沒辦法正確啟動 MySQL，馬上噴出底下問題：</p>
<blockquote><p>090205 11:14:24 mysqld_safe Starting mysqld daemon with databases from /var/db/mysql<br />
/usr/local/libexec/mysqld: Unknown collation &#8216;#46&#8242; in table &#8216;plugin&#8217; definition<br />
090205 11:14:24 [ERROR] Can&#8217;t open the mysql.plugin table. Please run mysql_upgrade to create it.<br />
090205 11:14:24  InnoDB: Started; log sequence number 0 46429<br />
090205 11:14:24 [ERROR] Fatal error: Can&#8217;t open and lock privilege tables: <span style="color:red"><strong>Unknown collation &#8216;#46&#8242; in table &#8216;host&#8217;</strong></span> definition</p></blockquote>
<p>為啥會出現紅色那段字，就是因為字元集不同，MySQL 6 有支援 <span style="color:green">utf8mb4</span>，但是 5.1.48 版本沒有，所以才會造成無法啟動，解決方法呢？就是把 <span style="color:green">/var/db/mysql/mysql</span> 砍掉，在重新啟動就可以了，當然您的資料庫也是無法使用，再去其他電腦裝上 MySQL 6.0.9 之後，把 <span style="color:green">/var/db/mysql/</span> 底下的資料庫 Copy 過去一份，利用 mysqldump 把全部資料庫 dump 下來，再 restore 回去原來的系統，大致上就可以了。</p>
<p>對於把 PHP 升級到 5.3 的時候，心裡就在想會遇到很多雷，果然是如此，很多 opensource 都尚未支援到 php 5.3，也因此很多函數都無法支援，<span style="color:red">ereg_</span> 系列都必須換成 <span style="color:red">preg_</span>，<span style="color:green">register_globals</span> 的移除，也不能使用 HTTP_GET or HTTP_POST，把 <span style="color:green">register_long_arrays</span> 拿掉，參考: <a href="http://php.net/manual/en/ini.core.php">http://php.net/manual/en/ini.core.php</a>，<a href="http://codeigniter.com">CodeIgniter</a> V 1.7.2 開始支援 PHP 5.3.0 版本，這樣大致上所有專案都可以順利啟動，底下是在 Wordpress 遇到的問題：</p>
<blockquote><p>Warning: strtotime() [function.strtotime]: It is not safe to rely on the system&#8217;s timezone settings. <span style="color:red"><strong>You are *required* to use the date.timezone setting or the date_default_timezone_set() function.</strong></span> In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected &#8216;Europe/Helsinki&#8217; for &#8216;EEST/3.0/DST&#8217; instead in /path/to/my/www/wp-includes/functions.php on line 35</p></blockquote>
<p>這在 <a href="http://wordpress.org/">Wordpress</a> 官網也是有<a href="http://wordpress.org/support/topic/285337">提出此問題</a>，解決方式有兩種，一種是在 wp-config.php 加上 <span style="color:green">date_default_timezone_set(&#8217;</span>UTC<span style="color:green">&#8216;);</span> 或者是 <span style="color:green">date_default_timezone_set(&#8217;</span>Asia/Taipei<span style="color:green">&#8216;);</span>，另一種是修改 php.ini，修改</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sy0">;</span> Defines the <span class="kw2">default</span> timezone used by the <a href="http://www.php.net/date"><span class="kw3">date</span></a> functions<br />
<a href="http://www.php.net/date"><span class="kw3">date</span></a><span class="sy0">.</span>timezone <span class="sy0">=</span> Asia<span class="sy0">/</span>Taipei</div></div>
<p>這樣大致上修補完成，其他程式的修改這裡就不補充了，底下是 PHP 網站所支援的 time zone，可以參考看看其他時區</p>
<p>Reference:<br />
<a href="http://wordpress.org/support/topic/285337">Php 5.3.0 &#038; WP 2.8 (It is not safe to rely on the system&#8217;s timezone)</a><br />
<a href="http://php.net/manual/en/ini.core.php">Description of core php.ini directives</a><br />
<a href="http://blog.gslin.org/archives/2007/09/25/1318/">現在寫 PHP6-compatible 的一些技巧</a><br />
<a href="http://nl3.php.net/manual/en/timezones.php">List of Supported Timezones</a></p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2009/06/11/1386/" title="[網站] 好站連結 (三)">[網站] 好站連結 (三) (0)</a></li><li><a href="http://blog.wu-boy.com/2008/09/13/388/" title="[FreeBSD]安裝 apache2 (worker) + PHP5.2.6 + mod_fastcgi + php5-fcgi">[FreeBSD]安裝 apache2 (worker) + PHP5.2.6 + mod_fastcgi + php5-fcgi (3)</a></li><li><a href="http://blog.wu-boy.com/2008/07/01/286/" title="[FreeBSD]Apache 噴出 signal Segmentation fault (11)">[FreeBSD]Apache 噴出 signal Segmentation fault (11) (1)</a></li><li><a href="http://blog.wu-boy.com/2008/06/18/281/" title="基本優化 tuning apache 跟 tuning mysql 跟 php 效能 ">基本優化 tuning apache 跟 tuning mysql 跟 php 效能  (5)</a></li><li><a href="http://blog.wu-boy.com/2008/06/05/275/" title="[FreeBSD] 安裝 PHP APC 加速網頁速度">[FreeBSD] 安裝 PHP APC 加速網頁速度 (2)</a></li><li><a href="http://blog.wu-boy.com/2006/09/19/16/" title="FreeBSD + Lighttpd + php + mysql 安裝過程">FreeBSD + Lighttpd + php + mysql 安裝過程 (0)</a></li><li><a href="http://blog.wu-boy.com/2010/06/07/2182/" title="[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter">[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/26/2087/" title="Apache 取得透過 Reverse Proxy (Varnish) 的 Client 真正 IP (mod_rpaf)">Apache 取得透過 Reverse Proxy (Varnish) 的 Client 真正 IP (mod_rpaf) (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/21/2054/" title="[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇)">[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇) (8)</a></li><li><a href="http://blog.wu-boy.com/2009/12/30/1920/" title="[PHP Framework] How to implement Plurk API in CodeIgniter">[PHP Framework] How to implement Plurk API in CodeIgniter (0)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/06/23/2240/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Linux Kernel] 撰寫簡單 Hello, World module (part 1).</title>
		<link>http://blog.wu-boy.com/2010/06/21/2231/</link>
		<comments>http://blog.wu-boy.com/2010/06/21/2231/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 09:36:10 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Driver]]></category>
		<category><![CDATA[Linux Kernel]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2231</guid>
		<description><![CDATA[來筆記如何在 Kernel 撰寫 hello world! module，在 Ubuntu Kernel 2.6.31-14 環境下撰寫，其實不難啦，首先先進入 Kernel 目錄，請在 /usr/src 底下看自己的系統版本，或者是利用 uname -r 來知道 Kernel 版本，底下是在 Ubuntu Kernel 2.6.31-14 Kernel 實做：
<span class="readmore"><a href="http://blog.wu-boy.com/2010/06/21/2231/" title="[Linux Kernel] 撰寫簡單 Hello, World module (part 1)." target="_blank">...詳全文（共1118字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>來筆記如何在 Kernel 撰寫 hello world! module，在 Ubuntu Kernel 2.6.31-14 環境下撰寫，其實不難啦，首先先進入 Kernel 目錄，請在 <span style="color:green">/usr/src</span> 底下看自己的系統版本，或者是利用 <span style="color:green">uname -r</span> 來知道 Kernel 版本，底下是在 Ubuntu Kernel 2.6.31-14 Kernel 實做：</p>
<h3>進入 Kernel 目錄</h3>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co0">#</span><br />
<span class="co0"># cd Kernel directory</span><br />
<span class="co0">#</span><br />
<span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>src<span class="sy0">/</span>linux-headers-2.6.31-<span class="nu0">14</span>-generic-pae</div></div>
<h3>建立 hello 目錄</h3>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co0">#</span><br />
<span class="co0"># mkdir directory</span><br />
<span class="co0">#</span><br />
<span class="kw2">mkdir</span> hello</div></div>
<h3>建立 Makfile 以及 hello.c</h3>
<p>hello.c:</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:580px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#include &lt;linux/kernel.h&gt; /* pr_info 所需 include 檔案*/</span><br />
<span class="co2">#include &lt;linux/init.h&gt;</span><br />
<span class="co2">#include &lt;linux/module.h&gt; /* 所有 module 需要檔案*/</span><br />
<span class="co2">#include &lt;linux/version.h&gt;</span><br />
<br />
MODULE_DESCRIPTION<span class="br0">&#40;</span><span class="st0">&quot;Hello World !!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
MODULE_AUTHOR<span class="br0">&#40;</span><span class="st0">&quot;Bo-Yi Wu &lt;appleboy.tw AT gmail.com&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
MODULE_LICENSE<span class="br0">&#40;</span><span class="st0">&quot;GPL&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw4">static</span> <span class="kw4">int</span> __init hello_init<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; pr_info<span class="br0">&#40;</span><span class="st0">&quot;Hello, world<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; pr_info<span class="br0">&#40;</span><span class="st0">&quot;The process is <span class="es1">\&quot;</span>%s<span class="es1">\&quot;</span> (pid %i)<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> current<span class="sy0">-&gt;</span>comm<span class="sy0">,</span> current<span class="sy0">-&gt;</span>pid<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw4">static</span> <span class="kw4">void</span> __exit hello_exit<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; printk<span class="br0">&#40;</span>KERN_INFO <span class="st0">&quot;Goodbye<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
module_init<span class="br0">&#40;</span>hello_init<span class="br0">&#41;</span><span class="sy0">;</span><br />
module_exit<span class="br0">&#40;</span>hello_exit<span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>Makefile:</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co0">#</span><br />
<span class="co0"># Makefile by appleboy &lt;appleboy.tw AT gmail.com&gt;</span><br />
<span class="co0">#</span><br />
obj-m &nbsp; &nbsp; &nbsp; += hello.o<br />
KVERSION := $<span class="br0">&#40;</span>shell <span class="kw2">uname</span> -r<span class="br0">&#41;</span><br />
<br />
all:<br />
&nbsp; &nbsp; $<span class="br0">&#40;</span>MAKE<span class="br0">&#41;</span> <span class="re5">-C</span> <span class="sy0">/</span>lib<span class="sy0">/</span>modules<span class="sy0">/</span>$<span class="br0">&#40;</span>KVERSION<span class="br0">&#41;</span><span class="sy0">/</span>build <span class="re2">M</span>=$<span class="br0">&#40;</span>PWD<span class="br0">&#41;</span> modules<br />
<br />
clean:<br />
&nbsp; &nbsp; $<span class="br0">&#40;</span>MAKE<span class="br0">&#41;</span> <span class="re5">-C</span> <span class="sy0">/</span>lib<span class="sy0">/</span>modules<span class="sy0">/</span>$<span class="br0">&#40;</span>KVERSION<span class="br0">&#41;</span><span class="sy0">/</span>build <span class="re2">M</span>=$<span class="br0">&#40;</span>PWD<span class="br0">&#41;</span> clean</div></div>
<p>之後只要切換到 hello 目錄，直接打 make 就可以產生出 hello.ko 檔案，直接載入 hello.ko 方式：</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">insmod .<span class="sy0">/</span>hello.ko</div></div>
<p>移除 hello.ko</p>
<div class="codecolorer-container bash " style="overflow:auto;white-space:nowrap;width:580px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">rmmod .<span class="sy0">/</span>hello.ko</div></div>
<p>之後到 /var/log/message 底下就可以看到訊息：<br />
<a href="http://www.flickr.com/photos/appleboy/4719816041/" title="Flickr 上 appleboy46 的 Kernel Hello World"><img src="http://farm5.static.flickr.com/4068/4719816041_ffa47ac6d5.jpg" width="500" height="136" alt="Kernel Hello World" /></a></p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/07/27/2303/" title="[Kernel Driver] 撰寫簡易 Timer 機制">[Kernel Driver] 撰寫簡易 Timer 機制 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/07/25/2296/" title="[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3)">[Linux Kernel] 簡單 hello world: License and Module 介紹(part 3) (0)</a></li><li><a href="http://blog.wu-boy.com/2010/07/21/2280/" title="[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2).">[Linux Kernel] 撰寫 Hello, World module: The __init and __exit Macros (part 2). (1)</a></li><li><a href="http://blog.wu-boy.com/2010/05/28/2165/" title="[Linux Kernel] built-in vs. module">[Linux Kernel] built-in vs. module (3)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/06/21/2231/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress 3.0 Release &#8220;Thelonious&#8221;</title>
		<link>http://blog.wu-boy.com/2010/06/20/2227/</link>
		<comments>http://blog.wu-boy.com/2010/06/20/2227/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 13:30:13 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2227</guid>
		<description><![CDATA[Wordpress 在6月17日 Release 3.0 版本名稱：Thelonious，官方部落格 WordPress 3.0 &#8220;Thelonious&#8221;，使用者可以在這裡下載，或者是利用後台方式升級，這次更新了 1,217 bug 修正以及功能增加，可以看底下官方網站影片：
<span class="readmore"><a href="http://blog.wu-boy.com/2010/06/20/2227/" title="Wordpress 3.0 Release &#8220;Thelonious&#8221;" target="_blank">...詳全文（共214字）</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/">Wordpress</a> 在6月17日 Release 3.0 版本名稱：Thelonious，<a href="http://wordpress.org/development/2010/06/thelonious/">官方部落格 WordPress 3.0 &#8220;Thelonious&#8221;</a>，使用者可以在<a href="http://wordpress.org/download/">這裡下載</a>，或者是利用<a href="http://codex.wordpress.org/Dashboard_Updates_SubPanel">後台方式升級</a>，這次更新了 1,217 bug 修正以及功能增加，可以看底下官方網站影片：</p>
<p><embed src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.21" type="application/x-shockwave-flash" width="500" height="270" wmode="transparent" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true" flashvars="guid=BQtfIEY1&amp;width=640&amp;height=360&amp;locksize=no&amp;dynamicseek=false&amp;qc_publisherId=p-18-mFEk4J448M" title="Introducing WordPress 3.0 &quot;Thelonious&quot;"></embed></p>
<p>大家可以參考 3.0 版本更<a href="http://codex.wordpress.org/Version_3.0">詳細介紹</a>，以及 <a href="http://core.trac.wordpress.org/query?group=status&#038;milestone=3.0&#038;desc=1&#038;order=priority">long list of issues in Trac</a>。感謝 218 位 contributors 為 3.0 的貢獻，目前官方也繼續開始邁向 3.1 的開發。</p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2009/10/22/1745/" title="Wordpress 2.8.5 Hardening Release">Wordpress 2.8.5 Hardening Release (1)</a></li><li><a href="http://blog.wu-boy.com/2009/03/03/910/" title="[Wordpress] post 文章不能使用 javascript 語法 ">[Wordpress] post 文章不能使用 javascript 語法  (1)</a></li><li><a href="http://blog.wu-boy.com/2009/02/15/758/" title="[wordpress]update 2.6 -> 2.71">[wordpress]update 2.6 -> 2.71 (0)</a></li><li><a href="http://blog.wu-boy.com/2008/07/03/287/" title="[FreeBSD]Lighttpd + php5 + 解決 wordpress Permalinks mod_write">[FreeBSD]Lighttpd + php5 + 解決 wordpress Permalinks mod_write (1)</a></li><li><a href="http://blog.wu-boy.com/2008/04/27/192/" title="[wordpress] 快速升級 Upgrade 2.5.0 -> 2.5.1 for Linux &#038; FreeBSD">[wordpress] 快速升級 Upgrade 2.5.0 -> 2.5.1 for Linux &#038; FreeBSD (4)</a></li><li><a href="http://blog.wu-boy.com/2008/04/24/188/" title="[Wordpress plugin] 好用的 CodeColorer 跟 AddQuicktag 搭配使用">[Wordpress plugin] 好用的 CodeColorer 跟 AddQuicktag 搭配使用 (1)</a></li><li><a href="http://blog.wu-boy.com/2008/04/20/182/" title="[WordPress] 好用的網站人數計數器喔 histats">[WordPress] 好用的網站人數計數器喔 histats (3)</a></li><li><a href="http://blog.wu-boy.com/2008/04/16/179/" title="解決 Wordpress 2.5 版本 RSS 摘要無法斷行">解決 Wordpress 2.5 版本 RSS 摘要無法斷行 (1)</a></li><li><a href="http://blog.wu-boy.com/2008/04/16/177/" title="[Wordpress] Upgrade 2.2.x to 2.5 無痛升級法 For Linux or FreeBSD">[Wordpress] Upgrade 2.2.x to 2.5 無痛升級法 For Linux or FreeBSD (0)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/06/20/2227/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[phpBB3 外掛] 根據使用者文章數目限制簽名檔顯示</title>
		<link>http://blog.wu-boy.com/2010/06/13/2213/</link>
		<comments>http://blog.wu-boy.com/2010/06/13/2213/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 07:00:23 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[phpBB3]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2213</guid>
		<description><![CDATA[前一篇提到：『[教學] phpBB3 使用者簽名檔 url 連結加上 rel=”nofollow”』，本篇會將其做成後台，方便管理者可以從後台管理，這次加上一個新功能：『限制使用者顯示簽名檔』，根據使用者文章數量來決定是否顯示簽名檔，可以避免想要來打廣告的新註冊使用者，限制文章數量是一種方式，但是也不是最好的方式，phpBB3 本身可以在後台限制是否顯示使用者簽名檔，不過我想各大站長都會開放此功能，好讓使用者可以放個人網站或者是部落格，底下是外掛安裝方式：
<span class="readmore"><a href="http://blog.wu-boy.com/2010/06/13/2213/" title="[phpBB3 外掛] 根據使用者文章數目限制簽名檔顯示" target="_blank">...詳全文（共2181字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>前一篇提到：『<a href="http://blog.wu-boy.com/2010/06/10/2203/">[教學] phpBB3 使用者簽名檔 url 連結加上 rel=”nofollow”</a>』，本篇會將其做成後台，方便管理者可以從後台管理，這次加上一個新功能：『限制使用者顯示簽名檔』，根據使用者文章數量來決定是否顯示簽名檔，可以避免想要來打廣告的新註冊使用者，限制文章數量是一種方式，但是也不是最好的方式，<a href="http://www.phpbb.com/">phpBB3</a> 本身可以在後台限制是否顯示使用者簽名檔，不過我想各大站長都會開放此功能，好讓使用者可以放個人網站或者是部落格，底下是外掛安裝方式：</p>
<h3>安裝</h3>
<p>打開 <span style="color:green">includes/acp/acp_board.php</span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Find</span><br />
<span class="co2">#</span><br />
<span class="st_h">'max_sig_img_height'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'lang'</span> <span class="sy0">=&gt;</span> <span class="st_h">'MAX_SIG_IMG_HEIGHT'</span><span class="sy0">,</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="st_h">'validate'</span> <span class="sy0">=&gt;</span> <span class="st_h">'int:0'</span><span class="sy0">,</span> &nbsp;<span class="st_h">'type'</span> <span class="sy0">=&gt;</span> &nbsp; &nbsp;<span class="st_h">'text:5:4'</span><span class="sy0">,</span> <span class="st_h">'explain'</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span><span class="sy0">,</span> <span class="st_h">'append'</span> <span class="sy0">=&gt;</span> <span class="st_h">' '</span> <span class="sy0">.</span> <span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">lang</span><span class="br0">&#91;</span><span class="st_h">'PIXEL'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span></div></div>
<p>後面加上</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># after add</span><br />
<span class="co2">#</span><br />
<span class="st_h">'max_sig_post_count_limit'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'lang'</span> <span class="sy0">=&gt;</span> <span class="st_h">'MAX_SIG_POSTS_LIMIT'</span><span class="sy0">,</span> &nbsp; <span class="st_h">'validate'</span> <span class="sy0">=&gt;</span> <span class="st_h">'int:0'</span><span class="sy0">,</span> &nbsp;<span class="st_h">'type'</span> <span class="sy0">=&gt;</span> &nbsp; &nbsp;<span class="st_h">'text:5:4'</span><span class="sy0">,</span> <span class="st_h">'explain'</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">,</span></div></div>
<p>打開 <span style="color:green">viewtopic.php</span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Find</span><br />
<span class="co2">#</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'user_sig'</span><span class="br0">&#93;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$config</span><span class="br0">&#91;</span><span class="st_h">'allow_sig'</span><span class="br0">&#93;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">optionget</span><span class="br0">&#40;</span><span class="st_h">'viewsigs'</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></div>
<p>取代</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Replace</span><br />
<span class="co2">#</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'user_sig'</span><span class="br0">&#93;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$config</span><span class="br0">&#91;</span><span class="st_h">'allow_sig'</span><span class="br0">&#93;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">optionget</span><span class="br0">&#40;</span><span class="st_h">'viewsigs'</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'user_posts'</span><span class="br0">&#93;</span> <span class="sy0">&gt;=</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$config</span><span class="br0">&#91;</span><span class="st_h">'max_sig_post_count_limit'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">||</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">data</span><span class="br0">&#91;</span><span class="st_h">'session_admin'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">data</span><span class="br0">&#91;</span><span class="st_h">'session_admin'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></div>
<h3>中文化</h3>
<p>打開 <span style="color:green">language/zh_cmn_hant/acp/board.php</span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Find</span><br />
<span class="co2">#</span><br />
<span class="st_h">'MAX_SIG_URLS_EXPLAIN'</span> <span class="sy0">=&gt;</span> <span class="st_h">'會員簽名檔中允許的最多連結數量。設定為 0，表示沒有限制。'</span><span class="sy0">,</span></div></div>
<p>後面加上</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># after add</span><br />
<span class="co2">#</span><br />
<span class="st_h">'MAX_SIG_POSTS_LIMIT'</span> <span class="sy0">=&gt;</span> <span class="st_h">'簽名檔顯示與否'</span><span class="sy0">,</span><br />
<span class="st_h">'MAX_SIG_POSTS_LIMIT_EXPLAIN'</span> <span class="sy0">=&gt;</span> <span class="st_h">'會員文章數量超過多少才會顯示。設定為 0，表示沒有限制。'</span><span class="sy0">,</span></div></div>
<p>請先參考 <a href="http://blog.wu-boy.com/2010/06/10/2203/">[教學] phpBB3 使用者簽名檔 url 連結加上 rel=”nofollow”</a>，在依照底下安裝改成後台</p>
<h3>安裝</h3>
<p>打開 <span style="color:green">includes/acp/acp_board.php</span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Find</span><br />
<span class="co2">#</span><br />
<span class="st_h">'allow_sig_links'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'lang'</span> <span class="sy0">=&gt;</span> <span class="st_h">'ALLOW_SIG_LINKS'</span><span class="sy0">,</span> <span class="st_h">'validate'</span> <span class="sy0">=&gt;</span> <span class="st_h">'bool'</span><span class="sy0">,</span> <span class="st_h">'type'</span> <span class="sy0">=&gt;</span> <span class="st_h">'radio:yes_no'</span><span class="sy0">,</span> <span class="st_h">'explain'</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">,</span></div></div>
<p>後面加上</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># after add</span><br />
<span class="co2">#</span><br />
<span class="st_h">'allow_sig_nofollow'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'lang'</span> <span class="sy0">=&gt;</span> <span class="st_h">'ALLOW_SIG_NOFOLLOW'</span><span class="sy0">,</span> <span class="st_h">'validate'</span> <span class="sy0">=&gt;</span> <span class="st_h">'bool'</span><span class="sy0">,</span> <span class="st_h">'type'</span> <span class="sy0">=&gt;</span> <span class="st_h">'radio:yes_no'</span><span class="sy0">,</span> <span class="st_h">'explain'</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">,</span></div></div>
<p>打開 <span style="color:green">viewtopic.php</span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Find</span><br />
<span class="co2">#</span><br />
<span class="re0">$bbcode</span><span class="sy0">-&gt;</span><span class="me1">bbcode_second_pass</span><span class="br0">&#40;</span><span class="re0">$user_cache</span><span class="br0">&#91;</span><span class="re0">$poster_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'sig'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$user_cache</span><span class="br0">&#91;</span><span class="re0">$poster_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'sig_bbcode_uid'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$user_cache</span><span class="br0">&#91;</span><span class="re0">$poster_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'sig_bbcode_bitfield'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>取代</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Replace</span><br />
<span class="co2">#</span><br />
<span class="re0">$check</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$config</span><span class="br0">&#91;</span><span class="st_h">'allow_sig_nofollow'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? <span class="kw2">true</span> <span class="sy0">:</span> <span class="kw2">false</span><span class="sy0">;</span><br />
<span class="re0">$bbcode</span><span class="sy0">-&gt;</span><span class="me1">bbcode_second_pass</span><span class="br0">&#40;</span><span class="re0">$user_cache</span><span class="br0">&#91;</span><span class="re0">$poster_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'sig'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$user_cache</span><span class="br0">&#91;</span><span class="re0">$poster_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'sig_bbcode_uid'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$user_cache</span><span class="br0">&#91;</span><span class="re0">$poster_id</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'sig_bbcode_bitfield'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$check</span><span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<h3>中文化</h3>
<p>打開 <span style="color:green">language/zh_cmn_hant/acp/board.php</span></p>
<p>找尋</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># Find</span><br />
<span class="co2">#</span><br />
<span class="st_h">'ALLOW_SIG_SMILIES'</span> <span class="sy0">=&gt;</span> <span class="st_h">'允許在會員簽名檔中使用表情符號'</span><span class="sy0">,</span></div></div>
<p>後面加上</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#</span><br />
<span class="co2"># after add</span><br />
<span class="co2">#</span><br />
<span class="st_h">'ALLOW_SIG_NOFOLLOW'</span> <span class="sy0">=&gt;</span> <span class="st_h">'增加會員簽名檔中網址連結設定 rel=&quot;nofollow&quot;'</span><span class="sy0">,</span></div></div>
<p>展示圖：<br />
<a href="http://www.flickr.com/photos/appleboy/4690382820/" title="Flickr 上 appleboy46 的 phpBB3_02"><img src="http://farm2.static.flickr.com/1296/4690382820_8f9ed1d09e_o.png" width="146" height="220" alt="phpBB3_02" /></a><br />
<a href="http://www.flickr.com/photos/appleboy/4689749097/" title="Flickr 上 appleboy46 的 phpBB3_01"><img src="http://farm5.static.flickr.com/4023/4689749097_4ea1177f3f.jpg" width="500" height="272" alt="phpBB3_01" /></a><br />
<a href="http://www.flickr.com/photos/appleboy/4690382832/" title="Flickr 上 appleboy46 的 phpBB3_03"><img src="http://farm5.static.flickr.com/4034/4690382832_98dbbca276.jpg" width="500" height="342" alt="phpBB3_03" /></a></p>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/06/30/2254/" title="[phpBB3] BBCode [url] Tag 支援中文網址">[phpBB3] BBCode [url] Tag 支援中文網址 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/10/2203/" title="[教學] phpBB3 使用者簽名檔 url 連結加上 rel=&#8221;nofollow&#8221;  ">[教學] phpBB3 使用者簽名檔 url 連結加上 rel=&#8221;nofollow&#8221;   (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/23/2240/" title="[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9">[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9 (0)</a></li><li><a href="http://blog.wu-boy.com/2010/06/07/2182/" title="[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter">[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/21/2054/" title="[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇)">[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇) (8)</a></li><li><a href="http://blog.wu-boy.com/2009/12/30/1920/" title="[PHP Framework] How to implement Plurk API in CodeIgniter">[PHP Framework] How to implement Plurk API in CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/24/1913/" title="[PHP] Release 噗浪 php-plurk-api 1.2 Beta.">[PHP] Release 噗浪 php-plurk-api 1.2 Beta. (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/06/1887/" title="PHP+MySQL 環境下 SQL Injection 攻防戰">PHP+MySQL 環境下 SQL Injection 攻防戰 (4)</a></li><li><a href="http://blog.wu-boy.com/2009/11/03/1781/" title="[Perl&#038;PHP] time() and Class::Date 日期轉換運算">[Perl&#038;PHP] time() and Class::Date 日期轉換運算 (1)</a></li><li><a href="http://blog.wu-boy.com/2009/10/26/1757/" title="[CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼">[CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼 (1)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/06/13/2213/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[教學] phpBB3 使用者簽名檔 url 連結加上 rel=&#8221;nofollow&#8221;</title>
		<link>http://blog.wu-boy.com/2010/06/10/2203/</link>
		<comments>http://blog.wu-boy.com/2010/06/10/2203/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 13:29:02 +0000</pubDate>
		<dc:creator>appleboy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[phpBB3]]></category>

		<guid isPermaLink="false">http://blog.wu-boy.com/?p=2203</guid>
		<description><![CDATA[基於 Moztw 討論區 有大陸使用者註冊之後，在簽名檔加入一些廣告連結，為了降低 Google Page Rank，所以我們必須指示搜尋引擎「不要前往此網頁上的連結」或是「不要前往此連結」，可以參考 關於 rel=&#8221;nofollow&#8221;，phpBB3 編輯三個檔案就可以了，此修改不影響文章內容，只有針對簽名檔作用，底下是 patch 程式碼，可以參考看看
<span class="readmore"><a href="http://blog.wu-boy.com/2010/06/10/2203/" title="[教學] phpBB3 使用者簽名檔 url 連結加上 rel=&#8221;nofollow&#8221;" target="_blank">...詳全文（共2017字）</a></span>]]></description>
			<content:encoded><![CDATA[<p>基於 <a href="http://forum.moztw.org/">Moztw 討論區</a> 有大陸使用者註冊之後，在簽名檔加入一些廣告連結，為了降低 Google Page Rank，所以我們必須指示搜尋引擎「不要前往此網頁上的連結」或是「不要前往此連結」，可以參考 <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=b5&#038;answer=96569">關於 rel=&#8221;nofollow&#8221;</a>，<a href="http://www.phpbb.com/">phpBB3</a> 編輯三個檔案就可以了，此修改不影響<span style="color:red">文章內容</span>，只有針對<span style="color:red">簽名檔</span>作用，底下是 patch 程式碼，可以參考看看</p>
<p><span style="color:green">includes/bbcode.php</span></p>
<div class="codecolorer-container diff " style="overflow:auto;white-space:nowrap;width:580px"><div class="diff codecolorer" style="font-family:Monaco,Lucida Console,monospace">--- phpBB3/includes/bbcode.php &nbsp;<span class="nu0">2010</span>-03-06 04:<span class="nu0">37</span>:<span class="nu0">23.000000000</span> +0800<br />
<span class="re4">+++ www/includes/bbcode.php &nbsp; &nbsp; <span class="nu0">2010</span>-06-<span class="nu0">10</span> <span class="nu0">20</span>:<span class="nu0">58</span>:<span class="nu0">02.000000000</span> +0800</span><br />
<span class="re6">@@ -<span class="nu0">2</span>,<span class="nu0">7</span> +<span class="nu0">2</span>,<span class="nu0">8</span> @@</span><br />
&nbsp;/**<br />
&nbsp;*<br />
&nbsp;* @package phpBB3<br />
<span class="re7">-* @version $Id$</span><br />
<span class="re8">+* @version $Id: bbcode.php <span class="nu0">9461</span> <span class="nu0">2009</span>-04-<span class="nu0">17</span> <span class="nu0">15</span>:<span class="nu0">23</span>:17Z acydburn $</span><br />
<span class="re8">+* @log <span class="nu0">2010</span>-06-<span class="nu0">10</span> appleboy $</span><br />
&nbsp;* @copyright <span class="br0">&#40;</span>c<span class="br0">&#41;</span> <span class="nu0">2005</span> phpBB Group<br />
&nbsp;* @license http://opensource.org/licenses/gpl-license.php GNU Public License<br />
&nbsp;*<br />
<span class="re6">@@ -<span class="nu0">48</span>,<span class="nu0">7</span> +<span class="nu0">49</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; /**<br />
&nbsp; &nbsp; &nbsp; &nbsp; * Second pass bbcodes<br />
&nbsp; &nbsp; &nbsp; &nbsp; */<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; function bbcode_second_pass<span class="br0">&#40;</span>&amp;$message, $bbcode_uid = '', $bbcode_bitfield = false<span class="br0">&#41;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; function bbcode_second_pass<span class="br0">&#40;</span>&amp;$message, $bbcode_uid = '', $bbcode_bitfield = false, $bbcode_is_sig = false<span class="br0">&#41;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>$bbcode_uid<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
<span class="re6">@@ -<span class="nu0">110</span>,<span class="nu0">6</span> +<span class="nu0">111</span>,<span class="nu0">13</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $message = preg_replace<span class="br0">&#40;</span>$preg<span class="br0">&#91;</span>'search'<span class="br0">&#93;</span>, $preg<span class="br0">&#91;</span>'replace'<span class="br0">&#93;</span>, $message<span class="br0">&#41;</span>;<br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /*</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* 2010.06.10 add search nofollow module by appleboy</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $replace = <span class="br0">&#40;</span>$bbcode_is_sig === true<span class="br0">&#41;</span> ? 'rel=&quot;external nofollow&quot;' : '';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $message = preg_replace<span class="br0">&#40;</span>&quot;/\<span class="br0">&#123;</span>NOFOLLOW\<span class="br0">&#125;</span>/i&quot;, $replace, $message<span class="br0">&#41;</span>;</span><br />
<span class="re8">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $preg = array<span class="br0">&#40;</span>'search' =&gt; array<span class="br0">&#40;</span><span class="br0">&#41;</span>, 'replace' =&gt; array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></div>
<p><span style="color:green">styles/Moztw-2009-1.0.6/template/bbcode.html</span></p>
<div class="codecolorer-container diff " style="overflow:auto;white-space:nowrap;width:580px"><div class="diff codecolorer" style="font-family:Monaco,Lucida Console,monospace">--- phpBB3/styles/subsilver2/template/bbcode.html &nbsp; &nbsp; &nbsp; <span class="nu0">2010</span>-03-06 04:<span class="nu0">37</span>:<span class="nu0">24.000000000</span> +0800<br />
<span class="re4">+++ www/styles/Moztw-<span class="nu0">2009</span>-1.0.6/template/bbcode.html &nbsp; &nbsp;<span class="nu0">2010</span>-06-<span class="nu0">10</span> <span class="nu0">17</span>:<span class="nu0">20</span>:<span class="nu0">32.000000000</span> +0800</span><br />
<span class="re6">@@ -<span class="nu0">52</span>,<span class="nu0">7</span> +<span class="nu0">52</span>,<span class="nu0">7</span> @@</span><br />
<br />
&nbsp;&lt;!-- BEGIN img --&gt;&lt;img src=&quot;<span class="br0">&#123;</span>URL<span class="br0">&#125;</span>&quot; alt=&quot;<span class="br0">&#123;</span>L_IMAGE<span class="br0">&#125;</span>&quot; /&gt;&lt;!-- END img --&gt;<br />
<br />
<span class="re7">-&lt;!-- BEGIN url --&gt;&lt;a href=&quot;<span class="br0">&#123;</span>URL<span class="br0">&#125;</span>&quot; class=&quot;postlink&quot;&gt;<span class="br0">&#123;</span>DESCRIPTION<span class="br0">&#125;</span>&lt;/a&gt;&lt;!-- END url --&gt;</span><br />
<span class="re8">+&lt;!-- BEGIN url --&gt;&lt;a href=&quot;<span class="br0">&#123;</span>URL<span class="br0">&#125;</span>&quot; class=&quot;postlink&quot; <span class="br0">&#123;</span>NOFOLLOW<span class="br0">&#125;</span>&gt;<span class="br0">&#123;</span>DESCRIPTION<span class="br0">&#125;</span>&lt;/a&gt;&lt;!-- END url --&gt;</span><br />
<br />
&nbsp;&lt;!-- BEGIN email --&gt;&lt;a href=&quot;mailto:<span class="br0">&#123;</span>EMAIL<span class="br0">&#125;</span>&quot;&gt;<span class="br0">&#123;</span>DESCRIPTION<span class="br0">&#125;</span>&lt;/a&gt;&lt;!-- END email --&gt;</div></div>
<p><span style="color:green">www/viewtopic.php</span></p>
<div class="codecolorer-container diff " style="overflow:auto;white-space:nowrap;width:580px"><div class="diff codecolorer" style="font-family:Monaco,Lucida Console,monospace">--- phpBB3/viewtopic.php &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2010</span>-03-06 04:<span class="nu0">37</span>:<span class="nu0">23.000000000</span> +0800<br />
<span class="re4">+++ www/viewtopic.php &nbsp; <span class="nu0">2010</span>-06-<span class="nu0">10</span> <span class="nu0">20</span>:<span class="nu0">27</span>:<span class="nu0">06.000000000</span> +0800</span><br />
<span class="re6">@@ -<span class="nu0">1342</span>,<span class="nu0">7</span> +<span class="nu0">1278</span>,<span class="nu0">8</span> @@</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>$user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig_bbcode_bitfield'<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $bbcode-&gt;bbcode_second_pass<span class="br0">&#40;</span>$user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig'<span class="br0">&#93;</span>, $user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig_bbcode_uid'<span class="br0">&#93;</span>, $user_cache<span class="br0">&#91;</span>$pos</span><br />
ter_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig_bbcode_bitfield'<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 2010.06.10 add search nofollow module by appleboy</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $bbcode-&gt;bbcode_second_pass<span class="br0">&#40;</span>$user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig'<span class="br0">&#93;</span>, $user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig_bbcode_uid'<span class="br0">&#93;</span>, $user_cache<span class="br0">&#91;</span>$pos</span><br />
ter_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig_bbcode_bitfield'<span class="br0">&#93;</span>, true<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig'<span class="br0">&#93;</span> = bbcode_nl2br<span class="br0">&#40;</span>$user_cache<span class="br0">&#91;</span>$poster_id<span class="br0">&#93;</span><span class="br0">&#91;</span>'sig'<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div></div>
<h3>Related View</h3><ul class="related_post"><li><a href="http://blog.wu-boy.com/2010/06/30/2254/" title="[phpBB3] BBCode [url] Tag 支援中文網址">[phpBB3] BBCode [url] Tag 支援中文網址 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/13/2213/" title="[phpBB3 外掛] 根據使用者文章數目限制簽名檔顯示">[phpBB3 外掛] 根據使用者文章數目限制簽名檔顯示 (1)</a></li><li><a href="http://blog.wu-boy.com/2010/06/23/2240/" title="[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9">[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9 (0)</a></li><li><a href="http://blog.wu-boy.com/2010/06/07/2182/" title="[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter">[PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2010/03/21/2054/" title="[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇)">[FreeBSD]high performance caching reverse proxy: Varnish (安裝架設篇) (8)</a></li><li><a href="http://blog.wu-boy.com/2009/12/30/1920/" title="[PHP Framework] How to implement Plurk API in CodeIgniter">[PHP Framework] How to implement Plurk API in CodeIgniter (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/24/1913/" title="[PHP] Release 噗浪 php-plurk-api 1.2 Beta.">[PHP] Release 噗浪 php-plurk-api 1.2 Beta. (0)</a></li><li><a href="http://blog.wu-boy.com/2009/12/06/1887/" title="PHP+MySQL 環境下 SQL Injection 攻防戰">PHP+MySQL 環境下 SQL Injection 攻防戰 (4)</a></li><li><a href="http://blog.wu-boy.com/2009/11/03/1781/" title="[Perl&#038;PHP] time() and Class::Date 日期轉換運算">[Perl&#038;PHP] time() and Class::Date 日期轉換運算 (1)</a></li><li><a href="http://blog.wu-boy.com/2009/10/26/1757/" title="[CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼">[CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼 (1)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.wu-boy.com/2010/06/10/2203/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
