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

PHP获取两个标签间中文字符出现乱码问题求助

解决PHP提取中文时的乱码问题

嗨,这个乱码问题我之前也碰到过,本质就是字符编码不匹配导致的——mb_detect_encoding函数对于短字符串或者特定编码的内容容易检测错误,让mb_substr用了错误的编码去截取,最终把中文拆成了乱码。

最简单的解决方案:明确指定编码

直接把函数里依赖自动检测编码的部分改成固定编码(比如Web开发最常用的UTF-8),就能解决问题。修改后的完整代码如下:

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = mb_strpos($string, $start);
    if ($ini == 0) return '';
    $ini += mb_strlen($start);
    $len = mb_strpos($string, $end, $ini) - $ini;
    // 替换自动检测为固定的UTF-8编码,避免误判
    return mb_substr($string, $ini, $len, 'UTF-8');
}

$string = '<div>財物類</div>';
$parsed = get_string_between($string, '<div>', '</div>');
echo $parsed; // 输出:財物類

额外优化:统一脚本的默认编码

如果你的PHP环境默认编码不是UTF-8,可以在脚本开头加上这一行,让所有mb系列函数默认用UTF-8处理,从根源减少编码问题:

mb_internal_encoding('UTF-8');

原理很简单:中文在UTF-8里是多字节存储的,mb_substr必须知道正确的编码才能按字符(而不是字节)截取,自动检测编码的不可靠性就是乱码的元凶,固定编码后就能保证截取时不会破坏中文的字节结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:35:52