WP Chinese Conversion 是 Wordpress 知名的最多人使用的 繁简自动转换多语种中文插件,但是已经有超过8年未更新,已无法在 PHP 8 以上运行,于是我试着用 Cursor 等 AI 工具修复错误,替换已被淘汰的函数,使其能够在 PHP 8.4 上运行。
WP Chinese Conversion 是 Wordpress 知名的最多人使用的 繁简自动转换多语种中文插件,但是已经有超过8年未更新,已无法在 PHP 8 以上运行,于是我试着用 Cursor 等 AI 工具修复错误,替换已被淘汰的函数,使其能够在 PHP 8.4 上运行。
好的,我会帮你将该 WordPress 插件适配到 PHP 8.4。
PHP 8.x 带来了许多不兼容的变更,常见的兼容性问题包括:
create_function
、each
、get_magic_quotes_gpc
等)。parent::
、static::
、$this
的用法)。WP_Widget
构造函数)。我会分步进行适配,先定位常见的 PHP 8.x 不兼容点,然后逐步修复。
WP_Widget
子类的构造函数签名(PHP 8 要求 __construct
,且父类构造函数要正确调用)。str_get_html
相关的 simple_html_dom 兼容性(该库在 PHP 8 之前有很多兼容性问题)。global $zh2Hans; if($zh2Hans == false)
,PHP 8 会报未定义变量)。each()
、create_function()
、get_magic_quotes_gpc()
等函数是否被使用。preg_replace
的 /e
修饰符(已废弃)。我会先检查 wp-chinese-conversion.php
文件中的高危点,然后再检查 simple_html_dom.php
和 ZhConversion.php
(如有需要)。
你的 Wpcc_Widget
类已经使用了 __construct
,但父类调用方式需要确认兼容性。
如:
global $zh2Hans;
if($zh2Hans == false) {
// ...
}
如果 $zh2Hans
未定义,PHP 8 会报错。应改为:
global $zh2Hans;
if(empty($zh2Hans)) {
// ...
}
或
if(!isset($zh2Hans) || $zh2Hans == false) {
// ...
}
simple_html_dom.php
旧版本在 PHP 8 下有很多兼容性问题,建议升级到最新版,或用兼容补丁。
each()
、create_function()
、get_magic_quotes_gpc()
、preg_replace('/e')
等。我会先修复 wp-chinese-conversion.php
文件中的高危点。
请确认你是否需要我一并检查和修复 simple_html_dom.php
和 ZhConversion.php
文件?(如你用的是旧版 simple_html_dom,强烈建议升级或打补丁)
如果你有报错日志,也可以贴出来,这样我能更快定位问题。
接下来我会先修复 wp-chinese-conversion.php
文件中的高危点。
Ran tool
Ran tool
Ran tool
Read file: wp-chinese-conversion.php
Read file: wp-chinese-conversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Read file: ZhConversion.php
Ran tool
Read file: simple_html_dom.php
Ran tool
Ran tool
Read file: simple_html_dom.php
经过详细分析,你的插件在 PHP 8.4 下主要有以下兼容性问题:
如 global $zh2Hans; if($zh2Hans == false)
,在 PHP 8+ 未定义变量会报错。
修复方法:改为 if(empty($zh2Hans))
或 if(!isset($zh2Hans) || !$zh2Hans)
。
你的 simple_html_dom.php 版本较老,大量方法未声明 public/protected/private,PHP 8+ 会警告。
修复方法:所有类方法都应加上 public
,如 public function clear()
。
建议直接升级到 simplehtmldom 1.9.1+ 或 sunra/php-simple-html-dom-parser 兼容 PHP 8 的分支。
each()
、create_function()
、get_magic_quotes_gpc()
、preg_replace('/e')
等废弃用法。WP_Widget
子类构造函数已用 __construct
,兼容 PHP 8。将 wp-chinese-conversion.php
和 convert.php
里所有if($zh2Hans == false)
改为if(empty($zh2Hans))
或if(!isset($zh2Hans) || !$zh2Hans)
推荐方案:直接用新版 simple_html_dom.php 替换旧版,或手动为所有类方法加 public
。
请回复你的选择(如“全部自动修复”、“只修复主插件文件”、“simple_html_dom 用新版”),我会一步步帮你完成。
如有报错日志也可以贴出来,能更快定位细节问题。
已完成以下自动修复,确保插件兼容 PHP 8.4:
wp-chinese-conversion.php
和 convert.php
中所有对 $zh2Hans
、$zh2Hant
、$zh2TW
、$zh2CN
、$zh2SG
、$zh2HK
的判断,全部改为 empty()
或 isset()
,防止未定义变量报错。public
关键字,消除 PHP 8+ 的警告。each()
、create_function()
、get_magic_quotes_gpc()
、preg_replace('/e')
等特性,无需额外处理。WP_Widget
子类构造函数已符合 PHP 8 要求。你现在可以在 PHP 8.4 环境下测试插件。
如遇到任何新报错或警告,请将报错信息贴出来,我会继续帮你修复!
如需进一步升级 simple_html_dom.php 到最新版或有其它需求,也可以随时告知。
Read file: simple_html_dom.php Read file: simple_html_dom.php 已修复此报错:
preg_match("/^[\w-:]+$/", $tag)
中的 -
在字符类 []
里未转义且不在首/末,PHP 7.3+ 会报“invalid range in character class”。-
移到字符类末尾,改为 preg_match("/^[\w:-]+$/", $tag)
,完全兼容 PHP 8。你现在可以重新测试插件,报错应该已消失。如有其它新报错,请继续反馈!