User Tools

Site Tools


ja:rule:fle:正規化ファイルパスを利用する

This is an old revision of the document!


正規化ファイルパスを利用する

ファイルパス名の正規化はシステムによって異なる。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

関連ガイドライン

参考文献

ja/rule/fle/正規化ファイルパスを利用する.1509001793.txt.gz · Last modified: 2017/10/26 07:09 by yohgaki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki