为何传入数组调用mb_convert_encoding报错?PHP文档显示支持数组
关于mb_convert_encoding处理数组报错的问题解答
你遇到的这个矛盾情况并不是文档有误,核心原因大概率是PHP版本兼容问题。
mb_convert_encoding支持数组作为第一个参数并递归转换内部字符串的特性,是从PHP 5.4.0版本才正式引入的。如果你的PHP版本低于5.4.0,这个函数只能接受字符串类型的第一个参数,自然会抛出mb_convert_encoding() expects parameter 1 to be string, array given的警告。
给你两个解决思路:
- 直接升级PHP版本到5.4.0及以上:这样就能直接使用原生函数处理数组,不需要额外代码。
- 无法升级的话,自己实现一个递归转换函数:
function mb_convert_encoding_recursive($data, $to_encoding, $from_encoding) { if (is_array($data)) { foreach ($data as $key => $value) { $data[$key] = mb_convert_encoding_recursive($value, $to_encoding, $from_encoding); } return $data; } elseif (is_string($data)) { return mb_convert_encoding($data, $to_encoding, $from_encoding); } // 非数组非字符串类型直接返回 return $data; } // 使用示例 $data = ['abcd', 'ddd']; $data = mb_convert_encoding_recursive($data, 'utf-8', 'windows-1251');
你可以通过执行echo PHP_VERSION;或者查看phpinfo()的输出来确认当前PHP版本,验证是不是版本过低导致的问题。
内容的提问来源于stack exchange,提问作者Igor Tarasov
相关产品推荐
相关产品推荐

