ala*_*and 4 php readdir str-replace
我得到的图像文件在文件名中有捷克语字符(例如,ěščřžýáíé),我想重新命名它们而不需要重音符号,这样它们就更适合网络.我以为我可以使用一个简单的str_replace函数,但它似乎与文件数组的工作方式不同,它与字符串文字一样.
检查扩展后,我用readdir读取文件.
function readFiles($dir, $ext = false) {
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($ext){
if(end(explode('.', $file)) == $ext) {
$f[] = $file;
}
} else {
$f[] = $file;
}
}
closedir($dh);
return $f;
} else {
return false;
}
} else {
return false;
}
}
$files = readFiles(".", "jpg");
$search = array('š','á','ž','í','?','é','?','?','ý','?',' ');
$replace = array('s','a','z','i','e','e','r','n','y','c','-');
$string = "?š?áýísdjksnalci sáš?ééalskcnkkjy+?éší";
$safe_string = str_replace($search, $replace, $string);
echo '<pre>';
foreach($files as $fl) {
$safe_files[] = str_replace($search, $replace, $fl);
}
var_dump($files);
var_dump($safe_files);
var_dump($string);
var_dump($safe_string);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
产量
array(6) {
[0]=>
string(21) "Hl?vka s listem01.jpg"
[1]=>
string(23) "Hl?vky v atelieru02.jpg"
[2]=>
string(17) "Jarn? v?hon03.jpg"
[3]=>
string(17) "Mlad? chmel04.jpg"
[4]=>
string(23) "Stavba chmelnice 05.jpg"
[5]=>
string(21) "Zimni chmelnice06.jpg"
}
array(6) {
[0]=>
string(21) "Hl?vka-s-listem01.jpg"
[1]=>
string(23) "Hl?vky-v-atelieru02.jpg"
[2]=>
string(17) "Jarn?-v?hon03.jpg"
[3]=>
string(17) "Mlad?-chmel04.jpg"
[4]=>
string(23) "Stavba-chmelnice-05.jpg"
[5]=>
string(21) "Zimni-chmelnice06.jpg"
}
string(53) "?š?áýísdjksnalci sáš?ééalskcnkkjy+?éší"
string(38) "cseayisdjksnalci-saseeealskcnkkjy+eesi"
Run Code Online (Sandbox Code Playgroud)
现在我正在运行WAMP,但跨平台工作的答案更好:)
根据0xFFFD标记(在Firefox中显示为带有问号的钻石),您已经没有使用正确的编码(Unicode/UTF-8)读取它们.到目前为止,我发现了这个bug,它似乎是相关的.
这是关于它的另一个SO话题:带有日语文件名的php readdir问题
到目前为止,等到PHP6稳定然后再使用它.
与问题无关:Normalizer是摆脱变音符号的更好工具.