📁

Mac OSでファイル名の濁点が一文字として扱われる場合の対処法(Laravel編)

に公開

はじめに

先日、ファイルアップロード処理を実装していたところ、ファイル名が以下のように表示されてしまいました。

アッフ゜ ロート゛ したファイル.csv

元のファイル名は「アップロードしたファイル.csv」だったのですが、濁点、半濁点が一文字として扱われている状態です。前回はフロントエンド(JavaScript)で解消する方法をご紹介しましたが、今回はサーバーサイド(Laravel)での解消方法をご紹介します。
https://zenn.dev/hrtr/articles/6a238878bfd08e

前提条件

・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