Can I suggest constructing case-insensitive character ranges for each letter $str?
Code: ( Demo )
function glob_i($string){
$result='';
for($i=0,$len=strlen($string); $i<$len; ++$i){
if(ctype_alpha($string[$i])){
$result.='['.lcfirst($string[$i]).ucfirst($string[$i]).']';
}else{
$result.=$string[$i];
}
}
return $result;
}
$dir='public_html';
$str='Test Folder';
echo glob_i($str);
echo "\n";
echo "$dir/*",glob_i($str),'*';
If you need a multibyte version, this is my suggested snippet: ( Demo )
function glob_im($string,$encoding='utf8'){
$result='';
for($i=0,$len=mb_strlen($string); $i<$len; ++$i){
$l=mb_strtolower(mb_substr($string,$i,1,$encoding));
$u=mb_strtoupper(mb_substr($string,$i,1,$encoding));
if($l!=$u){
$result.="[{$l}{$u}]";
}else{
$result.=mb_substr($string,$i,1,$encoding);
}
}
return $result;
}
$dir='public_html';
$str='testovací složku';
echo glob_im($str);
echo "\n";
echo "$dir/*",glob_im($str),'*';
Related Stackoverflow Page:
glob() PHP ?
p.s. / , : (Demo)
$dir='public_html';
$str='Test Folder';
echo "$dir/*",preg_replace_callback('/[a-z]/i',function($m){return '['.lcfirst($m[0]).ucfirst($m[0])."]";},$str),'*';
: ()
$encoding='utf8';
$dir='public_html';
$str='testovací složku';
echo "$dir/*",preg_replace_callback('/\pL/iu',function($m)use($encoding){return '['.mb_strtolower($m[0],$encoding).mb_strtoupper($m[0],$encoding)."]";},$str),'*';