[MOD] BBCode URL Tag 支援中文網址

MODs Released by Other phpbb Sites
歡迎推薦非官方認證外掛,或許有安全性之疑慮,所有問題由原發表者回覆!

版主: 版主管理群譯文組

版面規則
所謂「非官方認證外掛」是指未經官方認證,發表在 [3.0.x] MODs in Development 版面的外掛。

為了維護推薦外掛之品質,自即日起,如果要在這個版面推薦外掛,那麼請遵守底下格式,謝謝合作!

發文格式:
  • 外掛名稱:(原文/中文化名稱)
  • 外掛作者:(原文)
  • 外掛描述:(原文/中文化描述)
  • 外掛版本:(原文)
  • 外掛下載:(連結位址)
  • 資料來源:(連結位址)
    --
  • 中文化分享:(若外掛無須修改語言檔、或無須上傳語言檔,則免之。)
    --
  • 使用後心得:(簡單陳述您的安裝經驗、使用心得、或其他注意事項。)


p.s.
這個版面之發文,需經版主審核。
主題已鎖定
appleboy
竹貓忠實會員
竹貓忠實會員
文章: 304
註冊時間: 2002-09-15 21:47
來自: 高雄
聯繫:

[MOD] BBCode URL Tag 支援中文網址

文章 appleboy »

外掛名稱:BBCode URL Tag 支援中文網址
外掛作者: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));
}
找尋 validate_url 函式

代碼: 選擇全部

$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 . ']';
測試結果,請參考此網址:Re: 討論區判斷含中文鏈結的 bug
圖檔
歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY
主題已鎖定

回到「[3.0.x] 非官方認證外掛」