📁
Mac OSでファイル名の濁点が一文字として扱われる場合の対処法(Laravel編)
はじめに
先日、ファイルアップロード処理を実装していたところ、ファイル名が以下のように表示されてしまいました。
アッフ゜ ロート゛ したファイル.csv
元のファイル名は「アップロードしたファイル.csv」だったのですが、濁点、半濁点が一文字として扱われている状態です。前回はフロントエンド(JavaScript)で解消する方法をご紹介しましたが、今回はサーバーサイド(Laravel)での解消方法をご紹介します。
前提条件
・Mac OSのPCを使っている
・アップロードしたファイルは$uploadedFile
で保持している
解消方法
$fileName = $uploadedFile->getClientOriginalName();
Normalizer::normalize($fileName, Normalizer::FORM_C);
原因
Mac OSではファイル名を「NFD(Normalization Form Canonical Decomposition)」という形式で正規化しています。Decompositionという名前の通り、濁点や半濁点は一文字として扱われます。以前の記事(JavaScript版)でご紹介した方法と同様にこちらのファイル名を「NFC(Normalization Form Canonical Composition)」という形式で正規化し直すことで、「ト゛ 」を「ド」の一文字扱えるようになりました。
Discussion