假设您已经通过
while()
循环或
glob()
函数获取了服务器上的文件夹列表,并且该列表存储在
$folderList[]
中,如果您只是输出结果,我建议尝试以下方法:
$a = array(...);
$e = array(...);
$i = array(...);
$o = array('Ò','Ó','Ô','Õ','Ö','ò','ó','ô','õ','ö');
$u = array(...);
foreach($folderList as $folder){
$folder = str_replace($a,"a",$folder);
$folder = str_replace($e,"e",$folder);
$folder = str_replace($i,"i",$folder);
$folder = str_replace($o,"o",$folder);
$folder = str_replace($u,"u",$folder);
}
这段代码相当粗糙,但也比较简单。如果您想要更快的运行速度,可以使用unicode的二进制值进行数学计算或比较。例如,
$o
数组中的所有内容都是unicode字符00D2到00D6和00F2到00F6。所以,如果字母在
dechex('00D2')
和
dechex('00D6')
之间,或者在
dechex('00F2')
和
dechex('00F6')
之间,则用 "o" 替换。
如果您在没有特殊字符的情况下获取值(例如通过URL post),并且想将其映射到一个文件夹,则必须采取稍微不同的方法。首先,请意识到这不是理想的解决方案,因为您可能有两个文件夹,一个名为
Òdla
,另一个名为
Ödla
。在这种情况下,搜索短语
odla
只能引用其中之一。另一个将被永久忽略。假设您可以接受这一点(例如:您可以保证不会有重复的文件夹名称),那么您可能希望使用
GLOB_BRACE
。
<?php
$vowels = array("a", "e", "i", "o", "u");
$replace = array("...", "...", "...", "{Ò,Ó,Ô,Õ,Ö,ò,ó,ô,õ,ö}", "...");
$search = "odla";
$search = str_replace($vowels, $replace, $search);
glob($search, GLOB_BRACE);
?>
Ö
,还是其他什么? - Lekensteyn