是否可以将文件转换为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到服务器.
注意:使用$_SERVER [“PHP_SELF”]是一个安全风险,see here for more.
发布数据时,我将文件存储在变量中.显然,如果你使用的是multiple属性,那么你的代码就不会像这样了.
$handle以只读格式存储文本文件的全部内容;因此是“r”的论点.
$enc使用mb_detect_encoding
函数来检测编码(duh).
起初我无法获得正确的编码.将encoding_list设置为仅使用UTF-8,并将strict设置为true.