Joomla! 中文开发

2010-03-12 星期五
  • 登录
  • 注册新帐户
    Registration
    *
    *
    *
    *
    *
    带星号(*)的项目为必填项!
    • 放大字号
    • 默认字号
    • 缩小字号
    •  color
    • cyan color
    • deepblue color
    • green color
    • lime color
    • orange color
    • pink color
    • red color
    首页 社区信息
    关于Joomla!1.5的RSS处理
    E-mail 打印 PDF

      今天在做原来的采集组件移植的过程中,发现Joomla! 1.53的RSS读取真是进步不少!已经做了编码的自动转换。强悍!通过代码分析,得知Joomla! 1.53里本身有一个完整的字符串处理类:JString(文件全名:/libraries/joomla/utilities/string.php),其中,transcode函数是用来进行编码转换地,以下是代码:

    1.     function transcode($source, $from_encoding, $to_encoding) {
    2.  
    3.         if (is_string($source)) {
    4.             /*
    5.              * "//TRANSLIT" is appendd to the $to_encoding to ensure that when iconv comes
    6.              * across a character that cannot be represented in the target charset, it can
    7.              * be approximated through one or several similarly looking characters.
    8.              */
    9.             return iconv($from_encoding, $to_encoding.'//TRANSLIT', $source);
    10.         }
    11.     }
    由上面可以看出,它只是调用了ICONV来进行编码的转换。

    然后,再次分析,发现,原来它在读RSS时又使用了一个独立的编码转换函数:change_encoding(文件全名:/libraries/simplepie/simplepie.php)
    1.     function change_encoding($data, $input, $output)
    2.     {
    3.         $input = SimplePie_Misc::encoding($input);
    4.         $output = SimplePie_Misc::encoding($output);
    5.  
    6.         if (function_exists('iconv') && ($return = @iconv($input, "$output//IGNORE", $data)))
    7.         {
    8.             return $return;
    9.         }
    10.         elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data)))
    11.         {
    12.             return $return;
    13.         }
    14.         elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input)))
    15.         {
    16.             return $return;
    17.         }
    18.         elseif ($input == 'ISO-8859-1' && $output == 'UTF-8')
    19.         {
    20.             return utf8_encode($data);
    21.         }
    22.         elseif ($input == 'UTF-8' && $output == 'ISO-8859-1')
    23.         {
    24.             return utf8_decode($data);
    25.         }
    26.         return $data;
    27.     }
    28.  
    从这里可以看出,完善了不少了,除了ICONV,还可以使用mb_convert_encoding来进行,相应的对服务器的适应面也就宽了许多。

     

      而我的问题也就是出现在了这里:我的服务器不支持ICONV,不支持MB_STRING,郁闷到了极点。只好自己手动改了。为了以后能够兼容,所以,我直接修改的是string.php,这样我在别的程序里就也可以实现编码的转换了(嘿嘿,尤其是我的采集,也是需要进行编码转换地)。
      首先,将/libraries/simplepie/simplepie.php里的所有change_encoding调用改为JString::transcode(.....)格式的,然后,打开/media/D/usr/htdocs/j/libraries/joomla/utilities/string.php,找到function transcode,将其代码改为如下形式:

    1.         if (is_string($source)) {
    2.             /*
    3.              * "//TRANSLIT" is appendd to the $to_encoding to ensure that when iconv comes
    4.              * across a character that cannot be represented in the target charset, it can
    5.              * be approximated through one or several similarly looking characters.
    6.              */
    7.             if($from_encoding == $to_encoding ) {
    8.                 $output = $source;
    9.             } elseif (function_exists("mb_convert_encoding")){
    10.                 $output = mb_convert_encoding($source,$to_encoding,$from_encoding);
    11.             } elseif(function_exists("iconv")) {
    12.                 $output = iconv($from_encoding,$to_encoding,$source);
    13.             } else {
    14.                 include_once(JPATH_BASE."/includes/Chinese.class.php");
    15.                 $cht = new Chinese($from_encoding, $to_encoding);
    16.                 $output = $cht->convert($source);
    17.             }
    18.             return $output;
    19.             //return iconv($from_encoding, $to_encoding.'//TRANSLIT', $source);
    20.         }

    然后,将Discuz!论坛程序里的include下的chinese.class.php连同tables文件夹一并上传到网站的includes文件夹中,开始测试,一切OK!

    评论

    姓名 *
    Email (用于验证及回复)
    验证码   
    ChronoComments by Joomla Professional Solutions
    提交评论