2012-09-12 108 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, "."));