Joomla! 中文开发

2010-03-12 星期五
  • 登录
  • 注册新帐户
    Registration
    *
    *
    *
    *
    *
    带星号(*)的项目为必填项!
    • 放大字号
    • 默认字号
    • 缩小字号
    •  color
    • cyan color
    • deepblue color
    • green color
    • lime color
    • orange color
    • pink color
    • red color
    首页 Joomla!相关 个人体会 另类的Joomla!标题Alias处理方法
    另类的Joomla!标题Alias处理方法
    Joomla! 的連結其實是用 Alias 欄位。然而這 Alias 欄位並不一定是你輸入的文字或由 Title 欄位複製過來,它是經過轉換的結果。不幸的是,這轉換過程把 Alias 欄位變成只有英文、數字與破折號。

    當你儲存一篇文章、單元、分類或選單時,Joomla! 把 Alias 欄位(可能是由 Title 欄位複製過來)送交給 JFilterOutput::stringURLSafe() 處理。而 stringURLSafe() 函式則把這字串餵給 JLanguage::transliterate(),在那裏用上函式 utf8_decode(),然後 htmlentities()。接下來字串中所有奇怪的字元(對英文語系的人來說)都以正常的字元取代。中文或日文字無法經過這些折磨還存活。但是字串還要經過更多的處理。

    回到 stringURLSafe(),所有的空白字元及非文數字符號被以破折號取代或被移除。任何中文或日文字都從字串中消失了。並且故事還未結束。

    因為在經過了這些虐待後字串極可能只剩下破折號或完全空白,函式 check() (在幾個地方出現)在叫用 stringURLSafe() 後,最後把只剩下破折號或完全空白的字串用時間戳記來取代。

    如果要使用中文的連結(也就是在 Alias 欄位裏用中文),需要修改兩個檔案。首先修改 libraries/joomla/filter/filteroutput.php 中的 stringURLSafe() 函式,把其中的
    1. $str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);
    改成
    1. $str = preg_replace(array('/\s+/', '/\./'), array('-', '_'), $str);

    接下來修改 libraries/joomla/language/language.php,把
    1. $string = htmlentities(utf8_decode($string));
    改成
    1. $string = htmlentities($string, ENT_COMPAT, 'UTF-8');

    個人在 Joomla! 1.5.x 上只做過簡單測試,目前還都正常。

    评论

    姓名 *
    Email (用于验证及回复)
    验证码   
    ChronoComments by Joomla Professional Solutions
    提交评论
    最后更新 ( 2008-08-22 18:52 )