2010-11-03 19 views
0

我有一個腳本來上傳PHP文件。 我已經做了一些清理工作,以消除醜陋的字符。PHP:如何在文件上傳文件中刪除不必要的點?

我還想刪除文件名中的點,除了最後一個,表示文件擴展名。

任何人都有一個想法,我可以做到這一點。

例如,你怎麼會得到

$filename = "water.fall_blue.sky.jpg"; 
$filename2 = "water.fall_blue.sky.jpeg"; 

在這兩種情況下返回這個..?

water.fall_blue.sky 
+2

如果我要上傳archive.tar.gz什麼? – Gordon 2010-11-03 16:31:34

+0

[如何在PHP中提取文件擴展名?](http://stackoverflow.com/questions/173868/how-to-extract-a-file-extension-in-php)和[最快的方法來取代在PHP中的字符串](http://stackoverflow.com/questions/3869829/fastest-way-to-replace-string-in-php) – Gordon 2010-11-03 16:47:22

回答

9

使用pathinfo()提取文件名(「文件名」的數組元素是可用自PHP 5.2); str_replace()所有的點出來;並重新粘貼文件擴展名。

+0

太棒了!今天學到了新東西。謝謝。 – pnichols 2010-11-03 16:36:24

3

這裏有一個如何可以做到這一點的例子:

<?php 
$string = "really.long.file.name.txt"; 
$lastDot = strrpos($string, "."); 
$string = str_replace(".", "", substr($string, 0, $lastDot)) . substr($string, $lastDot); 
?> 

它可以轉換的文件名,像這樣:

really.long.file.name.txt - > reallylongfilename.txt

檢查這裏:example

[編輯]更新的腳本,點位置緩存現在

+1

用'_'代替'.'會不會更好? – RobertPitt 2010-11-03 15:53:49

+0

你應該緩存'strrpos($ string,「。」)'不要運行兩次。 – 2010-11-03 15:54:39

0

FILENAME =這/是(你的,file.name.JPG

$basename=basename($_FILES['Filedata']['name']); 

$filename=pathinfo($basename,PATHINFO_FILENAME); 
$ext=pathinfo($basename,PATHINFO_EXTENSION); 

//replace all these characters with an hyphen 
$repar=array(".",","," ",";","'","\\","\"","/","(",")","?"); 

$repairedfilename=str_replace($repar,"-",$filename); 
$cleanfilename=$repairedfilename.".".strtolower($ext); 

RESULT =這 - 是 - 你的文件,name.jpg

相關問題