Hãy dùng thử.
Ví dụ tôi đã sử dụng là điều tôi đang làm trong môi trường thử nghiệm, bạn có thể cần phải thay đổi mã một chút.
Tôi đã có một tập tin văn bản với các dữ liệu sau trong:
test
café
áÁÁÁááá
žžœš¥±
ÆÆÖÖÖasØØ
ß
Sau đó, tôi đã có một hình thức mà mất một đầu vào tập tin trong và thực hiện đoạn mã sau:
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, "UTF-8", $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>
Chức năng neatify_files
là một cái gì đó tôi đã viết để làm cho các mảng $_FILES
hợp lý hơn trong cách bố trí của nó.
Biểu mẫu là biểu mẫu chuẩn chỉ đơn giản là POST
s dữ liệu đến máy chủ.
Lưu ý: Sử dụng $_SERVER["PHP_SELF"]
là rủi ro bảo mật, see here for more.
Khi dữ liệu được đăng, tôi lưu trữ tệp trong một biến. Rõ ràng, nếu bạn đang sử dụng thuộc tính multiple
, mã của bạn sẽ không giống như thế này.
$handle
lưu toàn bộ nội dung của tệp văn bản ở định dạng chỉ đọc; do đó, đối số "r"
.
$enc
sử dụng chức năng mb_detect_encoding
để phát hiện mã hóa (duh).
Lúc đầu, tôi gặp sự cố khi lấy mã hóa chính xác. Đặt encoding_list
để chỉ sử dụng UTF-8 và đặt strict
là đúng.
Nếu mã hóa là UTF-8 thì tôi chỉ cần in dòng, nếu tôi không chuyển đổi nó sang UTF-8 bằng chức năng iconv
.
Bất kỳ tệp mẫu nào có thể thử? –
Bạn có thể tìm thấy câu trả lời của bạn ở đây: https://stackoverflow.com/a/7980354/1348344 –
Vì vậy, giải pháp tốt nhất là chỉ để phát hiện nếu nó có chứa một utf-8? –