如何在php中将文件转换为UTF-8?

前端之家收集整理的这篇文章主要介绍了如何在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到服务器.
注意:使用$_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.

猜你在找的PHP相关文章