首页| 版块| 我的| 发帖| 消息
主题:关于论坛编码及转换函数
zhangjingyu 
真正的通用函数(全场景)/**
* 万能编码转换器
* @param mixed $data 要转换的数据(字符串或数组)
* @param string $to 目标编码
* @param string|array $from 源编码(自动检测)
* @return mixed 转换后的数据
*/
function universalConvert($data, $to = 'UTF-8', $from = null) {
    // 如果是数组,递归处理
    if (is_array($data)) {
        foreach ($data as $key => $value) {
            $data[$key] = universalConvert($value, $to, $from);
        }
        return $data;
    }
    
    // 非字符串直接返回
    if (!is_string($data)) {
        return $data;
    }
    
    // 空字符串直接返回
    if (empty($data)) {
        return $data;
    }
    
    // 指定源编码
    if ($from) {
        $result = @mb_convert_encoding($data, $to, $from);
        if ($result && $result != $data) {
            return $result;
        }
    }
    
    // 自动检测(按优先级)
    $encodings = ['UTF-8', 'GBK', 'GB2312', 'GB18030', 'BIG5', 'latin1'];
    foreach ($encodings as $encoding) {
        if ($encoding === $to) continue;
        
        $result = @mb_convert_encoding($data, $to, $encoding);
        if ($result && $result != $data) {
            // 双重验证
            $back = @mb_convert_encoding($result, $encoding, $to);
            if ($back == $data) {
                return $result;
            }
        }
    }
    
    // 强制转换(忽略错误)
    $result = @mb_convert_encoding($data, $to, 'auto');
    return $result ?: $data;
}使用示例
读取数据:
// 原来
$row['aname'] = convertToUtf8($row['aname']);

// 通用版
$row['aname'] = universalConvert($row['aname'], 'UTF-8', 'GBK');

写入数据:
// 用户提交的数据转成数据库编码
$title = $_POST['title'];
$title_db = universalConvert($title, 'GBK', 'UTF-8');

处理整个数组:
// 一次性转换所有字段
$row = universalConvert($row, 'UTF-8', 'GBK');
zhangjingyu回帖于2026-08-14 08:46[查看电脑版]
下一页 (1/2)
下一楼»:“像universalConvert($data, $to = 'UTF-8', $from = null) 这样有多个参数的, ..
«上一楼:方案2:极简版(只针对你的需求)/**
* 从数据库编码转换为 UTF-8
* @param string $s ..

查看全部回帖(25)
«返回主帖