这个问题与UTF-8 all the way through不同,因为它询问安全性如何,并且使用mb_convert_encoding函数是一种好习惯。
假设用户可以使用PHP API上传文件。每个文件名和路径都存储在PostgreSQL数据库表中,该表以UTF-8作为默认编码。
有时,用户上传名称不是UTF-8编码的文件,并将其导入数据库。问题是非UTF-8编码的字符是乱码的,不能在表格列中显示。
我在考虑在导入之前将以下内容添加到PHP代码中:
if ( ! mb_check_encoding($output, 'UTF-8') {
$output = mb_convert_encoding($content, 'UTF-8');
}
这看起来是一个好习惯,如果我将UTF-8作为输出返回,它是否会被用户的客户端正确显示和转换?使用mb_convert_encoding会对字节造成潜在损失吗?
由于
答案 0 :(得分:0)
如果您要转换编码,则需要知道从转换的内容。你可以检查编码是否有效UTF-8,但是如果它告诉你它不是有效的UTF-8那么你仍然不知道它是什么 。从$from_encoding
省略mb_convert_encoding
参数只会使其为该参数设置一些预设编码,但这并不意味着该编码中$content
实际 。
换句话说:如果你不知道字符串是什么编码,你也不能有意义地把它转换成其他任何东西,只是试图从¯\ _(ツ)_ /¯转换它是一个crapshoot与结果同样可能是有用的东西和彻底的垃圾。
如果您遇到未知编码,您只有几个选择:
bin2hex
或类似内容,基本上放弃尝试正确解释它,但仍然保留原始值。