如何在php中将文件转换为UTF-8?
是否可以将文件转换为UTF-8?
如果我在提交后有权访问该文件 $_FILES['file']['tmp_name'] 注意:用户可以使用任何类型的字符集上传CSV文件,我通常会遇到一个未知的8位字符集. 我试试 $row = array(); $datas = file($_FILES['file']['tmp_name']); foreach($datas as $data) { $data = mb_convert_encoding($data,'UTF-8'); $row[] = explode(',',$data); } 但问题是,此代码删除单引号等特殊字符. 我的第一个问题是htmlspecialchars remove the value inside the array? 我把它作为补充信息.感谢那些可以提供帮助的人!
试试吧.
我使用的示例是我在测试环境中所做的事情,您可能需要稍微更改代码. 我有一个包含以下数据的文本文件: test café ááááááá ????¥± ?????as?? ? 然后我有一个输入文件的表单并执行以下代码: function neatify_files(&$files) { $tmp = array(); for ($i = 0; $i < count($_FILES); $i++) { for ($j = 0; $j < count($_FILES[array_keys($_FILES)[$i]]["name"]); $j++) { $tmp[array_keys($_FILES)[$i]][$j]["name"] = $_FILES[array_keys($_FILES)[$i]]["name"][$j]; $tmp[array_keys($_FILES)[$i]][$j]["type"] = $_FILES[array_keys($_FILES)[$i]]["type"][$j]; $tmp[array_keys($_FILES)[$i]][$j]["tmp_name"] = $_FILES[array_keys($_FILES)[$i]]["tmp_name"][$j]; $tmp[array_keys($_FILES)[$i]][$j]["error"] = $_FILES[array_keys($_FILES)[$i]]["error"][$j]; $tmp[array_keys($_FILES)[$i]][$j]["size"] = $_FILES[array_keys($_FILES)[$i]]["size"][$j]; } } return $files = $tmp; } if (isset($_POST["submit"])) { neatify_files($_FILES); $file = $_FILES["file"][0]; $handle = fopen($file["tmp_name"],"r"); while ($line = fgets($handle)) { $enc = mb_detect_encoding($line,"UTF-8",true); if (strtolower($enc) != "utf-8") { echo "<p>" . (iconv($enc,$line)) . "</p>"; } else { echo "<p>$line</p>"; } } } ?> <form action="<?= $_SERVER["PHP_SELF"]; ?>" method="POST" enctype="multipart/form-data"> <input type="file" name="file[]" /> <input type="submit" name="submit" value="Submit" /> </form> 我写的函数neatify_files是为了使$_FILES数组的布局更符合逻辑. 表单是一种标准表单,只是将数据POST到服务器. 发布数据时,我将文件存储在变量中.显然,如果你使用的是multiple属性,那么你的代码就不会像这样了. $handle以只读格式存储文本文件的全部内容;因此是“r”的论点. $enc使用 如果编码是UTF-8,那么我只是打印该行,如果没有,我使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |