2016-05-05 9 views
1

、E/S/C/R/Z/Y /áの特殊文字をエンコードしません。はutf8_encodeは、私は何の解決策を持っていないようだと、私は絶対にうんざりしています次のような問題を持っているなど

私は、ユーザーが自分のサーバーにファイルをアップロードすることができ、その後、彼らはそれらにアクセスすることができますAndroidアプリケーションを持っています。ユーザーが自分のアカウントを開くと、このアプリケーションは機能scandir()を使用し、私のサーバーでは、方法json_encode()を使用して自分のアプリケーションにデータを送信し、彼のファイルとフォルダを表示します。 そしてここで問題です:

例のアップロードのためのいくつかのユーザーが特殊文字(VálcovánístupHovitýchvzorko ZA tepla.pptx)によるファイルと、このファイルは、UTF-8でエンコードされていない場合、私はそれを渡すことはできません私はUTF-8エラーが発生するので、json_encode経由で。だから私は方法uf8_encode()を各ファイル名に使用しようとしました。č/š/ě/ð/á/ý/í/éなどの特殊文字を含むファイルやフォルダがある場合は、となります。とそれにはutf8_encode()というメソッドを使用すると、アプリケーションに何らかの混乱が起き、名前がfolderのフォルダを取得する代わりに、名前が取得されます。

htmlspecialchars()からiconv()までほぼすべてを試しましたが、サーバーに適切な名前のファイルとフォルダを返す方法が見つかりません。

+0

'č'のutf-8エンコーディングは 'c4 8d'です。あなたが 'Ä'を取得した場合、それは* utf-8でエンコードされている可能性がありますが、そのように扱われているわけではありません。 'Ä'のUnicodeは 'c4'です。 – fishinear

答えて

1

はい、そうではありません。 The docを読み取ります

はutf8_encodeを - UTF-8

ないことがあるが、それは間違いISO-8859-1ない何エンコーディング確かにISO-8859-1文字列をエンコードします。

あなたは、任意のエンコーディング間の変換にmb-convert-encodingを使用する必要があります。例えば。

$utfStr = mb-convert-encoding('č/š/ě/ř/ž/á/ý/í/é', 'UTF-8', 'ISO-8859-15') 

あなたは、クライアントのエンコーディングがわからない場合、あなたは常に動作、または厳密に正確ではないかもしれないmb_detect_encodingを、使用する必要があります。

はこの混乱を避けるために、私はラウンドそれを他の方法を行うと、AndroidアプリからUTF-エンコードされたファイル名を送信するのではなく、それをサーバーサイドを変換することをお勧めします。

+0

ありがとう、Androidアプリからutfでエンコードされたファイル名を送信することをお勧めします。ただし、Androidアプリでエンコードしようとしても、サーバー上に適切なファイル名を取得できません。 : outputStream.writeBytes( "コンテンツディスポジション:フォームデータ;名= \" にUploadedFile \ ";ファイル名= \" "+ fileP + File.separator + URLEncoder.encode(ファイル名、 "UTF-8")+" \ "+ lineEnd); このファイル名を取得する代わりに、次のように入力してください:V%C3%A1lcov%C3%A1n%C3%AD + stup%C5%88ovit%C3%BDch + vzork%C5% AF + za + tepla.pptx – Adam

+0

これは完全にurlでエンコードされたutf8文字列です。例えば'%C3%A1'部分は、U + 00E1(hex C3A1)charcter"á "を表します。 httpサーバはそれをurl-decodeする必要があり、PHPでは通常のutf8文字列として表示されます。 PHPでURLエンコードされた文字列を取得した場合は、モバイルアプリでダブルURLエンコードする可能性があります。私はそこにそれを修正することをお勧めします。実現できない場合は、phpで[urldecode](http://php.net/manual/en/function.urldecode.php)するだけです。 –

+0

ありがとうございます!あなたはおそらく私の人生を救った:) – Adam

関連する問題