Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[经验] 本地农场的utf8版转换制作要点

[复制链接]
guizi6 发表于 2009-11-12 11:35:04 | 显示全部楼层 |阅读模式
UCHome插件
语言编码: UTF8简体 
插件名称:
插件作者:
适用版本:
作为uchome插件推出的本地农场,在不同的网站上需要调动不同编码的用户数据。如果这个部分的数据没有处理好,会影响到整个程序的正常运行。遗憾的是,目前流行的几个本地农场版本,都是建立在用户数据属于gbk格式的前提之上。对于utf8用户来说,每次版本更新后都有一个格式转换的问题,否则就会出现乱码,好友数据超时,甚至无法完成初始化的过程。

经过这一段时间的反复测试与检验,我发现utf8版的文件制作并不困难。现将有关经验介绍如下,希望对不同版本的维护者有所裨益。

1。数据库格式:

早期的版本采用utf8的数据库格式。对gbk用户和utf8用户似乎都没有造成什么问题。但在近期版本上,数据库格式被改成了gbk的格式。建议版本维护者发表两个版本,一个gbk版,一个utf8版。utf8的用户,也可以自行把sql文件中的“character set gbk”替换成“character set utf8”后执行。

2。修改newfarm.php

这个文件带有汉字,但目前多数以ascii方式存盘。建议版本维护者将这个文件发表成两个版本,一个gbk版,一个utf8版。utf8的用户也可以通过使用适当的软件,将ascii版本转化成utf8版本。

3。修改newfarm/farmjason.php

这个文件带有汉字,但目前多数以ascii方式存盘。建议版本维护者将这个文件发表成两个版本,一个gbk版,一个utf8版。utf8的用户也可以通过使用适当的软件,将ascii版本转化成utf8版本。

另外,建议这个文件作下列修改:

(1)设立版本变量

在下列代码之前:
  1. function unicode_encode($str)
复制代码
增加:
  1. $utf8=0;
复制代码
增添这个变量的用处,是使下面的改变对gbk用户不产生影响。UTF8用户收到这个文件时,只要修改这个变量,就可以使得utf8有关的修改生效。

(2)修改unicode_encodegb的运行方式

农场软件明显是为gbk用户编写的。好几个需要进行编码辨识的地方,都直接调用unicode_encodegb,使得utf8编码数据受到影响。因此,我建议版本维护者在这功能下作如下改动:

改动一:

找到:
  1.     function unicode_encodegb($str)
  2. {
复制代码
紧接在后面添加:
  1.         global $utf8;
  2.         if ($utf8==1) {
  3.                 $str=$name;
  4.         } else {
复制代码
改动二:
找到这个函数里的下面语句:
  1. return $newstr;
复制代码
紧接在这个语句上面添加:
  1. }
复制代码
(3)对好友数据作如下修改

找到:
  1. $friend_str = json_encode( $friend_str );
复制代码
在这个语句后增加:
  1. if ($utf8==1) {
  2.         $friend_str = str_replace( "\\u", "\\\\u", $friend_str );
  3. }
复制代码
事实上,我相信这个语句对于gbk的用户是无害的。如果版本维护者能在gbk环境下鉴定一下,去掉条件判断部分更好。

4. 修改newfarm/newmc.php

这个文件带有汉字,但目前多数以utf8方式存盘。建议版本维护者将这个文件发表成两个版本,一个gbk版,一个utf8版。

另外,建议版本维护者对这个文件执行与上述的newfarm/farmjason.php同样的三点修改。

其他一些文件的修改和转换,只需从ascii或gbk的格式直接转换成utf8格式,不需要做内容上的修改。

以往我对友友、恋族、逗丁、残月、fbean、kufun等版本提供过的utf-8文件替换补丁,可以在下面这条讨论线上找到相关连接:

https://discuz.dismall.com/thread-1455556-1-1.html

最后,希望本地版的开心农场越开发越开心。
uyaboy 发表于 2009-11-12 11:56:03 | 显示全部楼层
费心了。。。。。。。。。。。。
回复

使用道具 举报

xhx6t 发表于 2009-11-12 12:21:46 | 显示全部楼层
1# guizi6


    深刻地学习了,想给柜子哥评分,可惜没权限
回复

使用道具 举报

ayjie 发表于 2009-11-12 13:47:39 | 显示全部楼层
谢谢,正需要,要是增加农场修改的问题更好
回复

使用道具 举报

yirihan 发表于 2009-11-18 09:41:52 | 显示全部楼层
兄弟你太牛了,佩服中
回复

使用道具 举报

 楼主| guizi6 发表于 2009-11-19 00:44:21 | 显示全部楼层
4# ayjie

其他的修改,目前我还没有注意到和编码有关的。所以你可以把比较稳定的版本拿来,根据这里介绍的要点,制作成立即可以使用的utf-8版本。
回复

使用道具 举报

Imabird 发表于 2009-11-19 19:11:56 | 显示全部楼层
.
回复

使用道具 举报

纽币 发表于 2009-11-20 01:25:46 | 显示全部楼层
..................................
回复

使用道具 举报

 楼主| guizi6 发表于 2009-11-21 11:46:49 | 显示全部楼层
本帖最后由 guizi6 于 2009-11-21 11:49 编辑

使用UTF8版本的朋友注意一下,我刚刚注意到FB兑换过程中,所调用到的newfarmjson.php文件中,直接使用了gb格式的字符串,向flex用户端传送信息,会导致UTF8用户出现乱码的情况。修改的办法,就是使用残月提供的字符转换工具(http://www.shayou.net/jm.htm),把这些gb格式的字符串转换成ascii格式,就可以避免乱码现象。

以fbean的V1.4 091119B版本为例,可以找到以下
  1.                                 echo "<HTML>\r\n<HEAD>\r\n<meta http-equiv="refresh" content="0.001; url=getfb.php">\r\n</HEAD>\r\n<BODY>\r\n跳转中。。。\r\n</BODY>\r\n</HTML>\r\n";
复制代码
把其中的“跳转中。。。”转换成“\\u8DF3\\u8F6C\\u4E2D\\u3002\\u3002\\u3002”,就可以了。

kufan在这一段代码中使用的gb字符串比较多,1117农场整包中一共出现六处,都要转换一下,比如:
  1.                                 print "<script>alert('对不起!你积分不够!');history.go(-1)</script>";
复制代码
转换成:
  1.                                 print "<script>alert('\\u5BF9\\u4E0D\\u8D77\\uFF01\\u4F60\\u79EF\\u5206\\u4E0D\\u591F\\uFF01');history.go(-1)</script>";
复制代码
豆丁/山姆版(1.18为例)的情况与fbean版一样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-27 19:30 , Processed in 0.029050 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表