これを試してください。
私が使用した例は、テスト環境で行っていたものでしたが、コードを少し変更する必要があります。
私は、次のデータをテキストファイルを持っていた:機能neatify_files
を
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>
です:その後、私は、ファイルの入力を取り、次のコードを実行し、フォームが持っていた
test
café
áÁÁÁááá
žžœš¥±
ÆÆÖÖÖasØØ
ß
私はレイアウトの中でより論理的な配列を$_FILES
にするために書きました。
このフォームは、サーバにデータを送信するだけの標準形式です。
注:$_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に変換しなかった場合は、単に行を印刷します。
いずれのサンプルファイルも試すことができますか? –
答えが見つかるかもしれません:https://stackoverflow.com/a/7980354/1348344 –
これはutf-8が含まれているかどうかを検出するのに最適な解決策ですか? –