Sunday, September 28th, 2008
调用外站JS很可能导致页面加入延迟,甚至出错(不能正常连通),能用静态调用就静态调用(比如文字链接)!
Posted in 今日一点, 代码调试 | No Comments »
Saturday, August 23rd, 2008
第一个问题:从"Form"获取的字符非得经历从gbk转到utf-8或者从utf-8转到gbk一次吗?
hdwiki4.0版本(8.21发布)的 string.class.php中的字符编码转换函数
function hiconv($str,$to='',$from='') {
global $encoding;
if(empty($to))$to=$encoding;
if(empty($from)){
if( strtolower($encoding)=='gbk' ){$from='utf-8';}else{$from='gbk';}
}
$to=strtolower($to);
$from=strtolower($from);
$isutf8=preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $str );
if( $isutf8 && $to=='utf-8' ) return $str;
if( !$isutf8 && $to=='gbk' ) return $str;
require_once('Chinese.class.php');
$ch = new chinese($from,$to);
$str= $ch->convert($str);
return $str;
}
为啥 if( strtolower($encoding)=='gbk' ){$from='utf-8';}else{$from='gbk';}
这样呢,非得经历从gbk转到utf-8或者从utf-8转到gbk一次吗?为什么呢?
相关帖子:
http://kaiyuan.hoodong.com/bbs/viewthread.php?tid=2870&extra=page%3D6
第二个问题:hdwiki的ie下查看页面源码出现“中文乱码”现象!
另外hdwiki的ie下查看页面源码出现“中文乱码”现象,问题原来越清晰啦,就是获取到多余的字符,最初发现是在页脚处的“友情链接说明”内容过多(两个未知字节),造成页脚错位,而后发现词条页面过多的“摘要”内容(同样是两个未知字节)导致词条页面,使用ie查看页面源码出现“中文乱码”现象(再重新编辑摘要,刷新页面后验证正常),目前首页剩下最后一处可能造成“错误”原因就是还有一处乱码没有清理(移到友情链接中间的一个友情链接的(多两个字节)说明内容)。
就目前来看问题应该是出在没有处理好读取到的多余的两个字节上。
PS:另外可能出问题的关键字可能还有:站名,文章标题,标签,分类说明
PS:从原来有数据并且编写的都不怎么规范升级到4.0就可能出现这个情况
PS:$summary默认的数据库长度是250字节(从upgrade13.php中得知)。。。
在doc.php中
$doc['summary']=trim(string::convercharacter(string::substring(strip_tags($doc['summary']),0,100)));
是不是说明$summary只正常接收100个字节呢,
顺便提一下,这个$summary在入库前没有经过检查,并且这个是管理员不可以控制的部分(只要是有编辑权限的都可以去写摘要吧),同时他会导致页面代码错乱(字符编码问题?还是字节超出问题?),那么有没有可能构造异常的摘要,而在其后放入不正常的代码呢?(因为数据库中的$summary部分还可以存入150字节呢),如果想办法让substring处理异常会有这个可能吧!!
doc.php中docreate函数
行108到124
if(@!(bool)$this->post['summary']){
$doc['summary']=trim(strip_tags($_ENV['doc']->replace_danger_word($this->post['summary'])));
}
$doc['letter']=string::getfirstletter($this->post['title']);
$doc['category']=$this->post['category'];
$doc['title']=string::substring(string::stripspecialcharacter(trim($this->post['title'])),0,80);
$doc['tags']=$_ENV['doc']->jointags($this->post['tags']);
$doc['content']=string::stripscript($_ENV['doc']->replace_danger_word($this->post['thcTextarea']));
$doc['summary']=trim(strip_tags($_ENV['doc']->replace_danger_word($this->post['summary'])));
$doc['summary']=(bool)$doc['summary']?$doc['summary']:$doc['content'];
$doc['summary']=trim(string::convercharacter(string::substring(strip_tags($doc['summary']),0,100)));
$doc['images']=util::getimagesnum($doc['content']);
$doc['time']=$this->time;
$doc['words']=string::hstrlen($doc['content']);
$doc['visible']=$this->setting['verify_doc']?'0':'1';
$result=$_ENV['doc']->add_doc($doc);
doc.class.php中add_doc函数
行107到123
function add_doc($doc) {
$this->db->query("insert into ".DB_TABLEPRE."doc
(cid,letter,title,tag ,summary ,content,author,authorid,time,lastedit,lasteditor,visible)
values ('".$doc['category']."','".$doc['letter']."','".$doc['title']."','".$doc['tags']."','".$doc['summary']."','".$doc['content']."',
'".$this->base->user['username']."','".$this->base->user['uid']."',
".$doc['time'].",".$doc['time'].",'".$this->base->user['username']."','".$doc['visible']."')");
$did=$this->db->insert_id();
$this->db->query("insert into ".DB_TABLEPRE."edition
(cid,did,author,authorid,time,ip,title,tag,summary,content,words,images )
values ('".$doc['category']."',$did,'".$this->base->user['username']."','".$this->base->user['uid']."',
'".$doc['time']."','".$this->base->ip."','".$doc['title']."','".$doc['tags']."','".$doc['summary']."','".$doc['content']."','".$doc['words']."','".$doc['images']."')");
return $did;
}
苦于对php不了解,上边的俩问题如果遇到大虾就别笑我呢!!
wiki地址:http://wiki.clin003.com/wiki/Hdwiki4
Posted in Wiki支持, 今日一点, 代码调试 | 1 Comment »
Saturday, August 2nd, 2008
开放图片上传功能
编辑LocalSettings.php,修改下面这一行为true即可(去掉前边的“#”)。
请不要使用windows自带的记事本改程序!mediawiki使用utf-8格式保存程序,记事本会在文件开始多出三个字节,而这会导致网站运行出错。推荐使用EmEditor进行编辑(另存为utf-8,不要unicode标记)。
(如果服务器上安装了ImageMagick库,可再取消$wgUseImageMagick行的注释。据说ImageMagick比GD库的缩略图效果稍好)
#$wgEnableUploads = true;
单击左侧的“工具箱”中的“上传文件”即可上传文件。
如果上传png格式的图片,会发现,png类型的文件被系统禁止了。调查includes/DefaultSettings.php的$wgFileExtensions 变量,可以看到png格式是允许的。为什么呢?JPG和GIF都正常上传啊。
原因是MediaWiki会判断上传文件的MIME Type,并禁止某些类型的MIME Type上传。而文件的MIME Type获取是通过php的mime_magic模块进行的,默认情况下这个模块无法正确识别png格式,所以png图像就无法得到正确的MIME Type,于是上传失败。
在phpinfo()中可以看到这样几行文字:
mime_magic support enabled
Directive Local Value Master Value
mime_magic.debug Off Off
mime_magic.magicfile /etc/httpd/conf/magic /etc/httpd/conf/magic
得知mime_magic的配置文件是 /etc/httpd/conf/magic。打开此文件就可以发现其中并没有PNG格式。
在GIF和JPG文件的附近添加这样一行:
# PNG 1 string PNG image/png
然后重新启动httpd。这样PNG文件就可以正常上传了。
参考:http://tech.idv2.com/2008/07/25/file-upload-in-mediawiki/
引用外部图片(直接在页面中放入图片url链接保存就可以看到图片)
在localsettings.php增加下面一行即可(可能引起安全问题):
$wgAllowExternalImages = true;
通过图片URL进行上传(使用可被公开访问的图片链接进行远程图片上传(这个功能很酷,:) 不过只有操作员才可以用,嘿嘿,安全考虑,这样很有必要呢))
在localsettings.php增加下面一行(可能引起安全问题):
$wgAllowCopyUploads = true;
在就是限制上传文件大小啦
在localsettings.php增加下面一行
$wgMaxUploadSize = 5020;
单位为字节,这个在新(versions 1.9.3 到 1.12)版本中已经不起作用啦。
需要在php环境中进行限制
那么还有个警告大文件上传的警示大小是在DefaultSetting.php中的,默认为150k,如果嫌烦,可以调大些(建议不用调)。
补充:
mediawiki中文件上传的尺寸主要受限于php环境和mediawiki本身环境:
受php环境pnp.ini的限制:涉及memory_limit、post_max_size和upload_max_filesize。按照php文档说明,这三者应当是memory_limit> post_max_size > upload_max_filesize
受mediawiki中LocalSetting.php限制:涉及$wgMaxUploadSize
参考:http://www.sogg.name/archives/tag/mediawiki
ok,myblog:http://clin003.com/
Posted in Wiki支持, 今日一点, 代码调试 | No Comments »
Saturday, August 2nd, 2008
GeSHi - Generic Syntax Highlighter
是一个非常优秀的代码格式高亮显示的PHP的东东(扩展,库,)
如果你对英文安装说明比较闹心,那么可以参考下我这里的安装经验
ok,myblog:http://clin003.com/
下边来看看怎样在Mediawiki中安装使用吧 :)
mediawiki的介绍地址在:http://www.mediawiki.org/wiki/Extension:GeSHiHighlight#Installation
Installation
Install GeSHi per the GeSHi install instructions (link above)
Cut & paste the above code to a file called GeSHiHighlight.php
Put GeSHiHighlight.php in your MediaWiki installations' extensions folder
Add:
include("extensions/GeSHiHighlight.php");
to LocalSettings.php
介绍很简单的,只是如果仅仅是按照上边的操作还是会有机会出错的(不会提示出错信息,但却没有高亮显示代码效果!)
下边说下我具体怎么做的:
下载最新的GeSHi(http://qbnz.com/highlighter/)。
解压,然后复制或剪切geshi(geshi-1.0.7.22\geshi)目录到你的mediawiki的扩展目录(extensions)下(建议删除contrib和docs两个目录及其内容)。
接着复制这里的代码(http://www.mediawiki.org/wiki/Extension:GeSHiHighlight#MediaWiki_and_GeSHi)到(可以新建个记事本文件重命名)GeSHiHighlight.php中。
然后把GeSHiHighlight.php放到mediawiki的扩展目录(extensions)下。
然后打开mediawiki根目录下的LocalSettings.php,添加include("extensions/GeSHiHighlight.php");(放到定义$wgSitename($wgSitename = "Clin003";)的上边一行)。
然后就ok啦,可以去添加的代码看看效果。 :o
添加高亮代码的格式为:
<code>把代码放放在这里</code>
比如放段php的代码
<php>echo "hello word"</php>
这样就ok啦。
Posted in Wiki支持, 今日一点, 代码调试 | No Comments »
Thursday, July 31st, 2008
明明两个文件内容一模一样,但一个会导致,输入验证码正确或用户名正确,提示sucess!
[gallery]
如图。。
解决办法:使用原始footer.htm文件覆盖或者使用不影响编码的工具对原始footer.htm进行修改保存即可
怪异的是,对发生错误提示的footer.htm进行utf-8另存为也不起作用!!(PS:缓存是更新过的,每次试验都要先清理缓存的,所以肯定不是缓存原因)
Posted in 今日一点, 代码调试 | No Comments »