次のように、音楽ディレクトリを読み取って、jPlayer の JSON を設定しています。
<?php
//tried utf-8, shift_jis, etc. No difference
header('Content-Type: application/json; charset=SHIFT_JIS');
//cant be blank so i put . to make current file dir as base
$Directory = new RecursiveDirectoryIterator('.');
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.mp3$/i', RecursiveRegexIterator::GET_MATCH);
//instead of glob(*/*.mp3) because isnt recursive
$filesJson = [];
foreach ($Regex as $key => $value) {
$whatever = str_ireplace(['.mp3','.\\'], '', $key);
$filesJson['mp3'][] = [
'title' => htmlspecialchars($whatever),
'mp3' => $key
];
}
echo json_encode($filesJson);
exit();
?>
問題は、ファイル名が標準の UTF-8 ではないファイル (ラテン語、日本語、韓国語など) にあります。例:
日本
韓国語
ラテン語 (pt-br)
に変換されるか、ラテン語の名前を解析するときに?
単になります (またはfor eg)null
Geração
4º
では、さまざまな種類の言語でファイル名/パスを正しく解析するにはどうすればよいでしょうか? ヘッダーの文字セットは役に立ちません。
情報:
Win7 x86 で Apache2 + PHP 5.4.2 を使用する XAMPP
更新 #1:
@infinity の回答を試しましたが、変更はありません。まだ?
JPでnull
、ラテンで。
<?php
header('Content-Type: application/json; charset=UTF-8');
mb_internal_encoding('UTF-8');
$Directory = new RecursiveDirectoryIterator('.');
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.mp3$/i', RecursiveRegexIterator::GET_MATCH);
$filesJson = [];
foreach ($Regex as $key => $value) {
$whatever = mb_substr($key, 2, mb_strlen($key)-6, "utf-8"); // 2 to remove .\ and -6 to remove .mp3 (-4 + -2)
$filesJson['mp3'][] = [
'title' => $whatever, //tried with and without htmlspecialchars
'mp3' => $key
];
}
echo json_encode($filesJson);
exit();
?>
onHTML-ENTITIES
の代わりに使用すると、ラテン文字は機能しますが、アジア人はまだ.utf-8
mb_substr()
?