You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress与MySQL中UTF-8编码乱码问题求助

解决多语言内容存入数据库后WordPress显示乱码的问题

兄弟,这问题我见太多了——典型的UTF-8双重编码搞出来的乱码!咱们来一步步搞定它:

1. 先砍掉错误的utf8_encode()调用

你看到的è、societÃ这类乱码,根源就是这个函数。utf8_encode()的作用是把ISO-8859-1(Latin-1)编码的字符串转成UTF-8,但如果你的原始内容本身已经是UTF-8编码,再用这个函数就会把它当成ISO-8859-1重新转码,直接导致双重编码,最终显示出一堆乱码字符。

2. 确保数据库连接和表的编码是utf8mb4

这是多语言支持的关键,别用老的utf8(它只能支持部分Unicode字符):

  • 在调用mysqli_real_escape_string之前,必须设置数据库连接的字符集:
    mysqli_set_charset($con, 'utf8mb4');
    
    这个设置会让MySQL知道你传递的字符串是UTF-8编码,避免存储时再做错误转码。
  • 检查你的数据库表和对应字段,确保字符集设置为utf8mb4,排序规则选utf8mb4_unicode_ci(比general_ci的排序更准确)。

3. 修正后的完整代码示例

// 先设置数据库连接字符集,这步必须放在转义之前
mysqli_set_charset($con, 'utf8mb4');

// 处理内容源
$source = stripslashes($source);
// 移除utf8_encode(),它是乱码的罪魁祸首
$source = mysqli_real_escape_string($con, $source);

4. 额外检查WordPress的编码设置

登录WordPress后台,进入「设置-常规」,确认「站点字符集」是UTF-8;另外你的主题模板文件也要保存为UTF-8无BOM格式(大部分代码编辑器都能设置),避免前端渲染时再出问题。

如果还想验证原始内容的编码,可以临时加一行代码:

echo mb_detect_encoding($source);

如果输出是UTF-8,就完全没必要用utf8_encode();如果是ISO-8859-1,那才需要转,但你的情况明显是转多了。

内容的提问来源于stack exchange,提问作者Jacopo Sciampi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:57:23