2012-09-12 111 views
0

我写了一个小php脚本,它从目录中读取文件名,使用explode去除扩展名,然后在php页面上显示文件名。php爆炸问题

但由于某些原因,只要文件名包含多个单词,它只会显示文件名的第一个单词。

下面是代码,

while ($name = readdir ($handle)) 
     { 
      if ($name == '.' || $name == '..') 
      continue; /* don't echo anything, skip to next read */ 
      $i++; 
      echo '<td >'; 
      echo '<form name="form" method="get" action="download.php">'; 
      echo '<input type="hidden" name="file" value='.$name.' />'; 
      $parts=explode(".",$name); 
      $name=$parts[0]; 
      echo '<input type="submit" name="submit" value='.$name.' class="subbutton" /> </br></br>'; 
      echo '</form>'; 
      echo '</td>'; 
      if($i==5) 
      { 
      echo '</tr>'; 
      echo '<tr>'; 
      $i=0; 
      } 
     } 
+2

你没有在'input'中引用'value'。 HTML将文件名中的空格作为单独的属性进行处理。 – Gareth

+0

你不应该这样混淆你的逻辑和HTML。你应该建立一个文件数组来显示在一个单一的循环中,并且实际上用第二个循环输出结果,而不是像这样将它们合并在一起。 – meagar

+1

检出内建的pathinfo和basename函数,用于将文件路径/文件名信息解析为组成碎片 –

回答

2

改变这一行:

echo '<input type="submit" name="submit" value='.$name.' class="subbutton" /> </br></br>'; 

这样:

echo '<input type="submit" name="submit" value="'.$name.'" class="subbutton" /> </br></br>'; 

你引用您的属性,这样一来与HTML解析器可以不要被文件名中的空格混淆。

0

您将需要确保在文件名中的最后一个时间段的左侧获得所有内容,因为文件名可以包含多个文件名。这使爆炸成为一种不太理想的解决方案。下面的代码会给你文件的名称,减去文件扩展名:

$file_name_without_extension = substr($full_file_name, 0, strrpos($full_file_name, "."));