我有以下问题,似乎没有解决方案,我非常反感。
我有 Android 应用程序,用户可以在其中将文件上传到我的服务器,然后他们就可以访问它们。因此,如果用户打开他的帐户,此应用程序将使用函数 scandir()
并且在我的服务器上我使用方法 json_encode()
将数据发送到我的应用程序以向他显示他的文件和文件夹。 问题是:
例如,如果某些用户上传了带有特殊字符的文件(Válcování stupHovitých vzorko za tepla.pptx)并且该文件不是 utf-8 编码的,那么我无法通过 json_encode 传递它,因为我收到 UTF-8 错误。所以我尝试在每个文件名上使用方法 uf8_encode()
并且它起作用了,但是 如果有一些文件或文件夹有特殊字符,比如 č/š/ě/ř/ž/á/ý/í/é 等 并在其上使用方法 utf8_encode()
然后我的应用程序变得有些困惑,而不是获取具有名称的文件夹č,我得到名字 Ä。
我几乎尝试了从 htmlspecialchars()
到 iconv()
的所有方法,但我找不到一种方法可以以正确的名称返回我服务器上的文件和文件夹.
最佳答案
是的,它没有。 The doc阅读:
utf8_encode — Encodes an ISO-8859-1 string to UTF-8
不确定是什么编码,但绝对不是ISO-8859-1 .
您需要使用 mb-convert-encoding在任意编码之间进行转换。例如
$utfStr = mb-convert-encoding('č/š/ě/ř/ž/á/ý/í/é', 'UTF-8', 'ISO-8859-15')
如果您不知道客户端的编码,您可能需要使用 mb_detect_encoding ,这可能并不总是有效,或者并不完全准确。
为了避免这种困惑,我建议换一种方式,从您的 Android 应用程序发送 utf 编码的文件名,而不是在服务器端进行转换。
关于php - utf8_encode 不编码特殊字符 ě/š/č/ř/ž/ý/á 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37045875/