php中没有piso编码,实为iso-8859-1的误写;推荐使用mb_convert_encoding()转换编码,但必须显式指定源编码,不可依赖mb_detect_encoding()自动识别,否则易出乱码。

直接说结论:PHP 里没有 piso 编码,你搜到的大概率是拼写错误或混淆了 ISO-8859-1(常被简写为 ISO 或误作 piso);真正能用、推荐、且稳定的编码转换函数是 mb_convert_encoding(),但它不能“自动识别”乱码来源,必须明确指定源编码。
为什么 mb_convert_encoding() 会转出乱码?
常见现象:原字符串看着像中文,但用 mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1') 一转,全变成 或空格。
- 实际源编码不是
ISO-8859-1,而是GBK、GB2312或Big5—— 尤其来自 Windows 记事本、旧数据库、Excel 导出 CSV 时高频出现 - 没开
mbstring扩展(phpinfo()查mbstring support是否为enabled) - 漏传第三个参数(源编码),此时 PHP 默认按
mb_internal_encoding()解释字节,极易错判 -
mb_detect_encoding()不可靠,它只做启发式猜测,对短文本、纯 ASCII 或混合编码几乎必然误判
怎么安全地把 GBK/GB2312 转成 UTF-8?
别依赖自动检测,优先靠上下文判断来源:
- MySQL 查询结果:查表
CHARACTER SET,若为gbk或gb2312,就用mb_convert_encoding($str, 'UTF-8', 'GBK') - 文件读取:
file_get_contents()后先用mb_check_encoding($str, 'GBK')和mb_check_encoding($str, 'UTF-8')对比验证 - POST 表单提交:看 HTML 页面
<meta charset="GBK">鎴栬











