我有以下问题似乎没有解决方案,我绝对反感。
我有Android应用程序,用户可以将文件上传到我的服务器,然后他们就可以访问它们。因此,如果用户打开他的帐户,此应用程序使用函数scandir()
,在我的服务器上,我使用方法json_encode()
将数据发送到我的应用程序,以向他显示他的文件和文件夹。 以下是问题:
如果某个用户上传了带有特殊字符的文件(VálcovánístupHovitýchvzorkoza tepla.pptx )且该文件不是utf-8编码的,那么我无法通过json_encode传递它,因为我收到UTF-8错误。所以我尝试在每个文件名上使用方法uf8_encode()
,如果有一些文件或文件夹包含特殊字符,例如č/š/ě/ř/ž,它就会工作,但 /á/ý/í/é等等。并在其上使用方法utf8_encode()
然后我的应用程序中出现了一些混乱,而不是获取名称为č的文件夹,我得到名称Ä。
我尝试了从htmlspecialchars()
到iconv()
的几乎所有内容,但我找不到一种方法,可以在我的服务器上以正确的名称返回文件和文件夹。
答案 0 :(得分:1)
是的,它没有。 The doc读到:
utf8_encode - 将ISO-8859-1字符串编码为UTF-8
不确定编码是什么,但绝对不是ISO-8859-1。
您需要使用mb-convert-encoding在任意编码之间进行转换。 E.g。
$utfStr = mb-convert-encoding('č/š/ě/ř/ž/á/ý/í/é', 'UTF-8', 'ISO-8859-15')
如果您不了解客户端的编码,则可能需要使用mb_detect_encoding,这可能并不总是有效,或者准确无误。
为了避免这种混乱,我建议以其他方式进行,并从您的Android应用程序发送utf编码的文件名,而不是将其转换为服务器端。