utf8_encode不编码特殊字符ě/š/č/ř/ž/ý/á等

时间:2016-05-05 08:27:28

标签: php android json utf-8 encode

我有以下问题似乎没有解决方案,我绝对反感。

我有Android应用程序,用户可以将文件上传到我的服务器,然后他们就可以访问它们。因此,如果用户打开他的帐户,此应用程序使用函数scandir(),在我的服务器上,我使用方法json_encode()将数据发送到我的应用程序,以向他显示他的文件和文件夹。 以下是问题:

如果某个用户上传了带有特殊字符的文件(VálcovánístupHovitýchvzorkoza tepla.pptx )且该文件不是utf-8编码的,那么我无法通过json_encode传递它,因为我收到UTF-8错误。所以我尝试在每个文件名上使用方法uf8_encode(),如果有一些文件或文件夹包含特殊字符,例如č/š/ě/ř/ž,它就会工作, /á/ý/í/é等等。并在其上使用方法utf8_encode()然后我的应用程序中出现了一些混乱,而不是获取名称为č的文件夹,我得到名称Ä。

我尝试了从htmlspecialchars()iconv()的几乎所有内容,但我找不到一种方法,可以在我的服务器上以正确的名称返回文件和文件夹。

1 个答案:

答案 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编码的文件名,而不是将其转换为服务器端。