status默认不支持中文的组名和用户名。
1、/lib/common.php,第409行,加上.[\pL\pN_\-\.]
或者在这个地方定义一个:
define('NICKNAME_FMT', VALIDATE_NUM.VALIDATE_ALPHA_LOWER.VALIDATE_CN);
其中:VALIDATE_CN在Validate.php中定义UTF-8编码:
define('VALIDATE_CN', '\pL\pN_\-\.');
这样可以保证可以使用中文组名,但是进不去组了,因为显示的部分仍然没有修改。
2、lib/router.php,245行左右,把“[a-zA-Z0-9]+”换成
[\pL\pN_\-\.]+
这样可以正常进入组,并且可以把“全名”“昵称”以及“别名”填写中文。但是URL部分仍然不能是中文。
3、Validate.php,第685行,把
((?:/(?:%[0-9a-f]{2}|[-a-z0-9_.!~*\'():@\&=+$,;])*)*/?)?
改为:
((?:/(?:%[0-9a-f]{2}|[-a-z0-9_.!~*\'():@\&=+$,;]|[\pL\pN_\-\.])*)*/?)?
并在688行的“$&xi”后加上一个“u”。
4、本质上应该是Validate类中没有一个中文和字符的函数,所以搜索Validate::string应该可以找到相关函数判断的地方。
5、还要把router.php里所有关于[a-zA-Z0-9]换成[\pL\pN_\-\.],否则会进不去组,组名不认识。
同样还有用户名,如果用户名为中文,那么一样会出找不到地址。
6、修改Notice.php,有几处preg没有加/u参数,并且还要完成上面的替换,共5处。
7、还有一处错误需要修正:reply的时候,只要是中文用户名无法回复。这个问题在js/util.js中的290行左右,有一个javascript的正则,注意这个正则不支持pcre,不能用/u参数和\pL等,而要换成更通用的“
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]”。
8、提醒,不要忘了安装php5-curl、php5-gettext、pear。(因为没安装php5-curl,不能上传文件,又折腾了一个晚上-_-)
示例网站:blog.chengzhangba.cn
阅读(2385) | 评论(0) | 转发(0) |