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。你现在可以重新测试插件,报错应该已消失。如有其它新报错,请继续反馈!