外掛作者:appleboy - http://blog.wu-boy.com
外掛描述:讓中文 Wiki 網址可以
外掛版本:0.0.1 [First release]
外掛下載:none
資料來源:http://blog.wu-boy.com/2010/06/30/2254/
在 phpBB2 的時候就有發現這問題了,當時並沒有想去解決這問題,然而至今到了 phpBB3,依然出現這問題,不過我想這是因為中文網址的盛行,以及像 Wiki 之類都會有中文標籤,例如:一分鐘教室-userChrome.css,解決方法可以透過 urlencode 函式來處理掉網址編碼問題,在 phpBB 處理文章儲存,會先經過 bbcode 的處理,將標籤加上一組 bbcode uid 來代表這篇文章所使用的全部 bbcode tag,整理文章處理過程可以參考:phpBB3 BBCode url Tag 支援中文網址。
在驗證文章內容全部 [url(=$var1)]$var2[/url] 標籤,會經過 get_preg_expression('url') 這函式的驗證,看 url 是否合法,當然如果網址列有中文就不可能通過,所以必須在網址驗證之前,把網址編碼過,通過驗證之後再把網址解碼,這樣就沒問題了,底下為安裝步驟
打開 includes/message_parser.php
找尋
代碼: 選擇全部
function validate_url($var1, $var2)
代碼: 選擇全部
/**
* url encode
*
* @param string $string http url
*/
function encode_url($string)
{
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
return str_replace($entities, $replacements, urlencode($string));
}
代碼: 選擇全部
$url = ($var1) ? $var1 : $var2;
代碼: 選擇全部
// encode url
$url = $this->encode_url($url);
代碼: 選擇全部
return ($var1) ? '[url=' . $this->bbcode_specialchars($url) . ':' . $this->bbcode_uid . ']' . $var2 . '[/url:' . $this->bbcode_uid . ']' : '[url:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($url) . '[/url:' . $this->bbcode_uid . ']';
代碼: 選擇全部
return ($var1) ? '[url=' . $this->bbcode_specialchars($url) . ':' . $this->bbcode_uid . ']' . $var2 . '[/url:' . $this->bbcode_uid . ']' : '[url:' . $this->bbcode_uid . ']' . urldecode($this->bbcode_specialchars($url)) . '[/url:' . $this->bbcode_uid . ']';