PHP重命名文件夹

PHP重命名文件夹,php,Php,我有一个简单的ul分类列表的照片库。 这些类别是我的服务器上的文件夹。 如果文件夹名为“Ödla”,则该类别也将名为“Ödla”。 是否可以将“Ödla”中的“Ö”仅替换为类别上的“o”,而不是服务器上的实际文件夹。我不想使用mysql 我希望你明白我的意思 编辑:类别仅为文本链接 Ödla 第2类 在本例中,我的服务器上有两个名为“Ödla”和“Category 2”的文件夹 我只想重命名类别链接,而不是文件夹。假设您已经在服务器上获得了文件夹列表(通过while()循环或glob()函数

我有一个简单的ul分类列表的照片库。 这些类别是我的服务器上的文件夹。 如果文件夹名为“Ödla”,则该类别也将名为“Ödla”。 是否可以将“Ödla”中的“Ö”仅替换为类别上的“o”,而不是服务器上的实际文件夹。我不想使用mysql

我希望你明白我的意思

编辑:类别仅为文本链接

  • Ödla
  • 第2类
在本例中,我的服务器上有两个名为“Ödla”和“Category 2”的文件夹


我只想重命名类别链接,而不是文件夹。

假设您已经在服务器上获得了文件夹列表(通过
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\u BRACE

<?php
    $vowels = array("a", "e", "i", "o", "u");
    $replace = array("...", "...", "...", "{Ò,Ó,Ô,Õ,Ö,ò,ó,ô,õ,ö}", "...");

    $search = "odla";
    $search = str_replace($vowels, $replace, $search);

    // Returns every folder who matches "Òdla", "Ódla", "Ôdla"....
    glob($search, GLOB_BRACE);
?>

您可能想看看,

您可以始终使用PHP函数
rename()
。使用@steven_desu的str_replace方法,您可以使用新名称调用旧文件夹的重命名。请看一下文档

编辑

例如:

<?php
// Create arrays with special chars
$o = array('Ò','Ó','Ô','Õ','Ö','ò','ó','ô','õ','ö');
// Remember to remove the slash at the end otherwise it will not work
$oldname = '/path/to/directory/Ödla';

// Get the directory name
$old_dir_name = substr($oldname, strrpos($oldname, '/') + 1);

// Replace any special chars with your choice
$new_dir_name = str_replace($o, 'O', $old_dir_name);

// Define the new directory
$newname = '/path/to/new_directory/' . $new_dir_name;

// Renames the directory
rename($oldname, $newname);

?>


请检查一下这个?

我读了@steven_desu写的东西,觉得它看起来很有趣,但我不知道如何使用它。我试过这个:

<?php
function fixlink($link){
    $match = array('Å','Ä','Ö','å','ä','ö',' ');
    $replace = array('a','a','o','a','a','o','-');
    return str_replace($match, $replace, $link);
}
function matchlink($search){
    $vowels = array("a", "e", "i", "o", "u");
    $replace = array("...", "...", "...", "{Ò,Ó,Ô,Õ,Ö,ò,ó,ô,õ,ö}", "...");

    $search = "odla";
    $search = str_replace($vowels, $replace, $search);

    // Returns every folder who matches "Òdla", "Ódla", "Ôdla"....
    glob($search, GLOB_BRACE);
}
echo "<a href=\"index.php?page=".matchlink(fixlink($file))."\">".$file."</a>";
?>


请澄清您的问题,“类别”是应该显示的文本,允许在URL/输入字段中显示
Ö
还是其他内容?此问题可能重复:如果我使用您的示例,在文件夹中查找图像不会有任何问题?我尝试过类似的方法,但是“odla”在“Ödla”中找不到图像。您应该只更改显示的名称,而不是链接指向的位置。例如,显示的名称与链接相同。类别名称显示在URL中,例如,我希望它是?cat=odla@Boo啊。我现在明白这个问题了。我认为在所有解析完成后,您只需要显示一个不同的名称。我不知道它是作为URL的一部分发送的。我会更新我的答案。