ugrás a tartalomhoz

Fájl nevének átalakítása

Vas Dávid · 2007. Már. 25. (V), 01.11
Üdv!

Nos egy olyan dolgot kéne csinálnom, hogy ha valaki feltölt a weblapra egy fájlt akkor annak a nevét átalakítsa hogy szinte minden böngésző letöltse és ha mondjuk word dokumentum akkor azt meg is lehessen, hibátlanul nyitni...
Nos, hogy mire is gondolok?
Arra hogy az átalakított fájlban csak számok betűk (ékezet nélküliek) és aláhúzás jelek meg persze egy pont szerepelhet, de az alap fájlnévben ha van más karakter akkor azt alakítsa át aláhúzás jelre, minden ilyen karaktert.

Azt már elöbb ellenőrzöm hogy hány pont van tehát ha eddig eljutunk akkor mindenképpen csak 1 pont lehet...

Én ezt így probáltam megoldani:
<?php

$file_name = "index 2.php";

$converter_strings = array(" ", "á", "é", "í", "ú", "ű", "ó", "ő", "+", "'", "!", "%", "=", "(", ")", "§");

$file_name_new = str_replace($converter_strings, "_", $file_name);

print $file_name_new;

?>
csak hát sajnos ezt szinte a végtelenségig írhatnám mire leírom az összes karaktert ami a billentyűzetről beírható, és akkor még csak a billentyűről beszéltem...

Persze most csak annyi kell, hogy a változóban($file_name) lévő karaktert alakítsa át mintha az lenne a fájl neve mondjuk a fájlnév is csak egy változó($_FILES['file']['name']).

Hogy lehetne ezt máshogy, esetleg egyszerűbben, rövidebb és jobb kóddal megoldani?
Gondolom reguláris kifejezés lesz a titok nyitja...
 
1

Egy példa

vbence · 2007. Már. 25. (V), 01.34
Nálam egy ilyen van rendszeresítve:
<?
	function urisafe ($s) {
		$s = strtolower ($s);
		$s = strtr ($s, "öüóőúéáűí", "ouooueaui");
		$s = strtr ($s, "ÖÜÓŐÚÉÁŰÍ", "ouooueaui");
		$s = preg_replace ("/[^a-z0-9]+/", "-", $s);
		$s = preg_replace ("/(-+$)|(^-+)/", "", $s);
		return $s;
	}
?>
Ha szeretnéd, hogy a pont karakter megmaradjon, akkor így:
...
		$s = preg_replace ("/[^a-z0-9.]+/", "-", $s);
...
Elsősorban barátságos URL-ek készítéshez használom, nem filenévhez, de gondolom (ez utóbbi) jó arra a célra is.
2

örök hála, majd ha nagy leszek meghálálom

Vas Dávid · 2007. Már. 25. (V), 02.12
kösszi, ez egy jó megoldás bár én -t lecseréltem _erre.
Jó lesz aztán majd ha sok időm lesz írok egy sajátot...
kössz
3

a minusz szebb :)

vbence · 2007. Már. 25. (V), 11.21
A második sormintában se felejtsd el kicserélni: $s = preg_replace ("/(_+$)|(^_+)/", "", $s);
Ez leszedi a kezdő és záró minuszt (így már aláhúzást), ha úgy alakulna a fájlnév.
4

Kötőjel

attlad · 2007. Már. 25. (V), 11.26
Szerintem (is) a - jobb fájlnévben, webcímben.