去评论
dz插件网

趁帝国8.0还没有发布,说说帝国那些老掉牙的代码

饾暦饾枎饾枒饾枏饾枂饾枅饾枑
2024/09/11 13:04:50
趁帝国8.0还没有发布,说说帝国那些老掉牙的代码。主要集中到编码处理e/class/doiconv.php这个文件。基本需要大改。首先看个片段。
  1. $this->unicode_table = array();                while(list($key,$value)=each($tmp))                {                        $this->unicode_table[hexdec(substr($value,7,6))]=substr($value,0,6);                }
PHP 4.0.0 开始支持 each(),但是从 PHP 7.0.0 开始,each() 函数已被弃用,并且在 PHP 8.0.0 中被移除。想想这是多古老的函数了。别小看这个会影响到帝国自带的全文搜索,支付,增加栏目生成拼音乱码等(php7.3+以上环境)所以帝国7.5建议PHP不能大于7.1是最合适的。

那怎么解决呢,其实很简单的。使用 foreach就可以了,代码如下:
  1. $this->unicode_table = array();                                foreach($tmp as $key=>$value)                        {                        $this->unicode_table[hexdec(substr($value,7,6))]=substr($value,0,6);                }
实际帝国存在这片段的代码还有很多处的就不一一讲解了,另外帝国函数命名不规范(必需参数与可选参数顺序),数组键名不带单引号(PHP8+会直接终止运行的)等。说直接点要想帝国7.5UTF支持现在的PHP8+也就是需要把帝国以往的所有文件全部去修改一遍。因为帝国的数组键名都是没有带单引号的。顺便告诉个好消息,就算帝国8.0发布后,只要你有二次开发基本也需要全部修改您的二开代码。因为二开的作者大都是偷懒也没有注意这些兼容细节的。谨此提供需要的老坛们,望看见此贴的有二开帝国的站长重视下代码的规范写法。