试试吧.
我使用的示例是我在测试环境中所做的事情,您可能需要稍微更改代码.
我有一个包含以下数据的文本文件:
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 "
" . (iconv($enc, "UTF-8", $line)) . "
";} else {
echo "
$line
";}
}
}
?>
" method="POST" enctype="multipart/form-data">我写的函数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.
如果编码是UTF-8,那么我只是打印该行,如果没有,我使用iconv函数将其转换为UTF-8.