【问题标题】:Uploading CSV file containing special characters like French accents上传包含法国口音等特殊字符的 CSV 文件
【发布时间】:2018-01-09 20:39:25
【问题描述】:

在网络应用程序中,我们允许用户通过上传 CSV 文件来添加数据。

有时这些 CSV 文件中的字段包含特殊字符,例如 François。

当它们包含这些时,上传通常会失败,因为名称字段是上传文件中的关键字段,而这些字段返回为空。

我们已经使用

设置了表单编码
<form accept-charset="UTF-8">

页面本身使用 UTF-8 编码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

但上传的文件仍然“失败”。

作为测试,我们也尝试使用

utf8_encode();

在有问题的字段上,但出现同样的问题。

如果相同的上传文件在上传之前被最终用户编码为 UTF-8,那么它可以正常工作,但我们的大多数用户不是很技术,所以我们不妨说一种外来语言,试图让他们设置对上传文件进行编码,那么我们有什么其他方法可以处理这个问题,我们可以强制/将所有上传的文件转换为 UTF-8 格式?

【问题讨论】:

    标签: php encoding utf-8


    【解决方案1】:

    不久前我遇到了同样的问题,客户上传了一个法语文本文件(同样的东西),然后在 PHP 文件中使用以便被读取/回显。

    你需要做的是这个。

    如果您还没有这样做,请将您的标题更改为以下内容:

    header ('Content-type: text/html; charset=iso8859-15');
    

    以上内容很重要,以便将其读取为 iso8859-15 而不是 UTF-8。

    然后再次使用您已经尝试过的utf8_encode(); 函数。

    作为$file = utf8_encode ( $file );

    旁注:我花了一段时间才开始工作(这相当棘手)并且很高兴它成功了。

    我必须说明正在读取的相关文件的方式(对于我的客户)是这种方式,如果它有任何帮助:

    $file = file_get_contents("$french_file", FILE_USE_INCLUDE_PATH);
    

    【讨论】:

    • 感谢您的回答 - 如果用户上传文件为 UTF-8 怎么办?我假设这会导致另一个问题,因为文件已经是 UTF-8 但标题是 ISO,然后我们试图编码已经是 UTF-8 的东西?由于我无法控制文件上传时的编码方式,因此我试图预测替代用例
    • @bhttoan 欢迎。它不会或不应该伤害它。如果我没记错的话,我确实对类似文件的英文版使用了相同的代码。据我所知,它不应该伤害它。
    • 用户必须使用您告诉他们使用的编码上传一个文本文件,或者您必须允许他们告诉您该上传的编码是什么。 (他们的浏览器不会知道或询问他们,所以你告诉或询问浏览器不会有帮助。)如果用户有你网站的个人资料,你可以让他们告诉你他们对未来上传的选择。个人资料页面(类似于他们的首选时区,如果适用)。 [或者,您可以完全避免使用文本文件,尤其是 CSV。]
    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多