Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mb_convert_编码函数是一种好的做法吗_Php_Postgresql_Encoding_Character Encoding - Fatal编程技术网

Php 使用mb_convert_编码函数是一种好的做法吗

Php 使用mb_convert_编码函数是一种好的做法吗,php,postgresql,encoding,character-encoding,Php,Postgresql,Encoding,Character Encoding,这个问题与其他问题不同,因为它询问安全性如何,以及使用mb_convert_编码函数是否是一种良好的做法 假设用户可以使用PHPAPI上传文件。每个文件名和路径都存储在一个PostgreSQL数据库表中,该表的默认编码为UTF-8 有时,用户上传的文件名称不是UTF-8编码的,它们被导入到数据库中。问题是,未进行UTF-8编码的字符被置乱,并且不会在表列中显示 在导入之前,我考虑在PHP代码中添加以下内容: if ( ! mb_check_encoding($output, 'UTF-8') {

这个问题与其他问题不同,因为它询问安全性如何,以及使用mb_convert_编码函数是否是一种良好的做法

假设用户可以使用PHPAPI上传文件。每个文件名和路径都存储在一个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_编码是否会导致字节丢失


谢谢

如果要转换编码,您需要知道要从中转换什么。您可以检查编码是否有效UTF-8,但如果它告诉您它无效UTF-8,那么您仍然不知道它是什么。从
mb\u convert\u encoding
中省略
$from\u encoding
参数只会使其假定该参数采用某种预设编码,但这并不意味着
$content
实际上在该编码中

换句话说:如果您不知道字符串的编码方式,那么您也无法有意义地将其转换为其他内容,而只是尝试将其从“”转换\_(ツ)_/“'是一个垃圾球,其结果同样可能是有用的东西和完全的垃圾

如果遇到未知编码,您只有几个选择:

  • 拒绝输入值
  • 测试它是否是少数其他预期编码之一,然后根据您的最佳猜测显式转换;但这也几乎是一个废话
  • 只需在值上使用
    bin2hex
    或类似的方法,基本上放弃了对其进行正确解释的尝试,但仍然保留了一些与原始值的相似之处

  • 若你们应该将文件导入数据库,那个么真正的问题是什么呢