PHP が現在のスクリプトと同じディレクトリに他のすべてのファイルを収集し、これからメニューを生成する Web サイトがあります (このメニューには、スクリプトが実行されている現在のファイルが含まれます)。
このファイル名のリストからこのメニューの HTML を生成する間、ファイル名が現在のファイル名と等しいかどうかをそれぞれチェックします (__ FILE __ を使用)。その場合は、スタイルを適用してメニュー内のその項目を強調表示します。
ファイル名がページ タイトルにも使用されているため、私のファイル名にはフランス語のアクセントがあります。これは Chrome と Firefox では問題なく動作しますが、Safari と IOS では動作しません。ファイル名からフランス語のアクセントを削除すると問題が解決するため、フランス語のアクセントはこのプロセスをどこかで混乱させます。
これが私のコードです:
現在のディレクトリからすべての関連ファイルを取得します
if ($handle = opendir(getcwd())) {
$albums = array();
while (false !== ($entry = readdir($handle))) {
if(is_numeric(substr($entry, 0, 4))) array_push($albums, $entry);
}
closedir($handle);
}
これは、var_dumps を使用した文字列の比較です。
for($i=0; $i < count($albums); $i++){
echo var_dump($albums[$i]); echo var_dump(basename(__FILE__));
}
その結果のエコーで:
string(26) "2010_Kalymnos,_Grèce.php"
string(25) "2010_Kalymnos,_Grèce.php"
UTF_8またはASCIIでそれらを強制しようとすると、フランス語のアクセントをどのように処理するかを確認すると、アクセントの変換が異なりますが、何が原因かわかりません. fileanmes( __ FILE __, readdir()) を取得するために使用したメソッドですか?
これが重要な場合に備えて、私の HTML ファイルは utf-8 です。私のPHPを特にUTF-8に設定しても問題は解決しません。
編集
<?php echo bin2hex($albums[$i]); echo '<br/>'.bin2hex($originFilename);?>
結果:
323031305f4b616c796d6e6f732c5f477265cc8063652e706870
323031305f4b616c796d6e6f732c5f4772c3a863652e706870
2 つのうち、最初の 16 進文字列が正しいものです。