====== 正規化ファイルパスを利用する ====== ファイルパス名の正規化はシステムによって異なる。Windows/Linuxの場合は積極的にUnicode正規化を行わずNFC正規化を利用する。macOSの場合、積極的にNFD正規化を行う。 パス名の正規化方法が異なるため、macOSからパス名を取得した場合、適切な正規化を行わないとWindow/Linux上でファイルで同じファイル名のファイルができてしまう。 例: NFCは濁音・半濁音の文字を一文字で表し、NFDを2文字で表します。このため、NFCとNFD正規化のパス名が利用されると、「ガードレール」などの文字列は見た目は同じだが、NFCとNFの異なる文字列として保存される。 ===== 非適合コード例 ===== **NFC変換なしのパス名生成** // masosのNFSボリュームからのファイル名取得 $files = glob('/macos/nfs/volume/*'); // $filesを利用するとNFDの文字列を利用することになる ===== 適合コード例 ===== **NFDの文字列をNFCに正規化する** // masosのNFSボリュームからのファイル名取得 $files = glob('/macos/nfs/volume/*'); // NFDをNFCに正規化 $normalized = array_may(function($f) { return Normalizer::normalize($f, Normalizer::FORM_C); }, $files); // $normalizedを利用する ===== 例外 ===== NFDで正規化されていることが保証されている場合、正規化処理を省略できる。 ===== リスク評価 ===== [ルール/推奨事項のリスク評価] [評価例 - 英語表記に統一] ^ Rule ^ Severity ^ Likelihood ^ Remediation Cost ^ Priority ^ Level ^ | IDS05-J | medium | unlikely | medium | P4 | L3 | ===== 関連ガイドライン ===== ===== 参考文献 =====