【问题标题】:PHP rename folderPHP重命名文件夹
【发布时间】:2010-10-13 13:17:08
【问题描述】:

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

我希望你明白我的意思。

编辑:类别只是文本链接

  • 奥德拉
  • 2 类

在此示例中,我的服务器上有两个文件夹,分别名为“Ödla”和“Category 2”

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

【问题讨论】:

标签: php


【解决方案1】:

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

http://www.php.net/manual/en/function.rename.php

编辑

示例:

<?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);

?>

请检查一下这个?

【讨论】:

    【解决方案2】:

    你可能想看看iconvAnother stack question

    【讨论】:

      【解决方案3】:

      假设您已经获得了服务器上的文件夹列表(通过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 发布)并且您希望将其映射到文件夹,那么您必须采取稍微不同的方法。首先,意识到这不是理想的解决方案,因为您可能有两个文件夹,一个名为Òdla,一个名为Ödla。在这种情况下,搜索短语 odla 只能引用这些文件夹中的 一个。另一个将被永久忽略。假设您对此没问题(例如:您可以保证不会有此类重复的文件夹名称),您可能希望使用GLOB_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);
      ?>
      

      【讨论】:

      • 如果我使用您的示例,在文件夹中查找图像不会有任何问题吗?我尝试了类似的方法,但“odla”在“Ödla”中找不到图像
      • 您应该只更改显示的名称,而不是链接指向的位置,例如奥尔达
      • 显示的名称与链接相同。类别名称显示在 URL 中,例如 domain.com/index.php?cat=Ödla,我希望它是 ?cat=odla
      • @Boo 啊。我现在明白了这个问题。我以为你只需要在所有解析完成后显示一个不同的名称。我没有意识到它是作为 URL 的一部分发送的。我会更新我的答案。
      【解决方案4】:

      我阅读了@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>";
      ?>
      

      【讨论】:

        猜你喜欢
        • 2014-09-09
        • 2016-08-21
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        相关资源
        最近更新 更多