前两天将MIXSITE转为UTF-8,昨天晚上上传到主站mixsite.org(php5.2),经测试没问题。
测试站的后续上传并测试,但测试站比较悲剧,有时访问不了,那站主要用来测试PHP5.3版的兼容情况。
转为UTF-8的好处是能显示各种语言而不会出现乱码,缺点是像中文等象型语言的空间占用上要大些,不过为了兼容性,牺牲些空间占用还是值得的,毕竟UTF-8还是未来的趋势!
前两天将MIXSITE转为UTF-8,昨天晚上上传到主站mixsite.org(php5.2),经测试没问题。
测试站的后续上传并测试,但测试站比较悲剧,有时访问不了,那站主要用来测试PHP5.3版的兼容情况。
转为UTF-8的好处是能显示各种语言而不会出现乱码,缺点是像中文等象型语言的空间占用上要大些,不过为了兼容性,牺牲些空间占用还是值得的,毕竟UTF-8还是未来的趋势!
在php5.3环境下运行程序无法正常使用,提示“Deprecated: Function eregi() is deprecated in ……”或“Deprecated: Function ereg_replace() is deprecated in ……”。问题根源是php中有两种正则表示方法,一个是posix,一个是perl,php6打算废除posix的正则表示方法所以后来就加了个preg_match。从php5.3开始,以上的版本不支持 ereg() 函数,而是使用 preg_match() 函数;不支持 ereg_replace() 函数,而使用 preg_replace() 函数。
简单的解决方法是在 ereg 或 ereg_replace() 前加个过滤提示信息符号即可。如:把ereg()变成@ereg()。这样屏蔽了提示信息,但根本问题还是没有解决。
最好的解决方法是:将不支持的函数修改为支持的函数即可。
例如:
Deprecated: Function eregi() is deprecated in D:\www\oscommerce\catalog\includes\classes\language.php on line 87
那么,将87行的
if(eregi(‘^(‘ . $value . ‘)(;q=[0-9]\\.[0-9])?$’, $this->browser_languages[$i])
改为:
if(preg_match(‘/^(‘ . $value . ‘)(;q=[0-9]\\.[0-9])?$/i’, $this->browser_languages[$i])
再例如:
Deprecated: Function ereg_replace() is deprecated in C:\wamp\www\includes\functions\general.php on line 61
那么,将61行的
$string = ereg_replace(‘ +’, ‘ ‘, trim($string));
改为:
$string = preg_replace(‘{ +}’, ‘ ‘, trim($string));
如此类推,其它类似的错误也可以按照上面两个函数的语法来做修改。
特别提醒:posix与perl的很明显的表达区别就是是否加斜杠,所以与ereg相比,后者在正则的前后分别增加了两个”/”符号,不能缺少。
最近买了VPS,研究了好几天,其实重点研究的是virtualmin,装上它,研究了基本操作,发现蛮好用的!
这博客就建立在VPS上,主要作为MixSite.org的更新日志和各类资料的收集等等,MixSite目前在程序上还没改名,只是想好名字并申请了域名。发现还真难静下心来好好完善MixSite。