07. juni 2005 - 03:24
Der er
13 kommentarer og 1 løsning
Fjern punktum i filnavn, men ikke før extention
Hejsa, Jeg bruger følgende kode til at fjerne invalid tegn har filnavnet. Hvordan fjerner jeg punktum "." fra filnavnet, uden at den samtidig bliver fjernet før extention? Ex.: Ok: filename.zip bad: file.name.zip (skal laves om til filename.zip (fjernes)) /Clean file name. function badchar($var) { $bad = "\/'*^´`+}{()*<>½][£!§½%¤#&=¨áàãââçéèêëìíîïñòóôõöùúûüýÿ?,"; for($i = 0; $i < strlen($bad); $i++) { $var = str_replace($bad[$i], "", $var); } $replace = array("æ" => "ae", "ø" => "oe", "å" => "aa", "Æ" => "Ae", "Ø" => "Oe", "Å" => "AA", " " => "_"); while(list($key, $value) = each($replace)) { $var = str_replace($key, $value, $var); } return $var; } $file_name = badchar($_FILES['upld_file']['name']);
Annonceindlæg fra Hitachi
”Forskellighed gør os stærkere!”
Diversitet er ikke kun buzzwords og politisk korrekthed, men et spørgsmål om at alle føler sig godt tilpas og kan yde deres bedste.
31. januar 2025
function badchar($var) { $bad = "\/'*^´`+}{()*<>½][£!§½%¤#&=¨áàãââçéèêëìíîïñòóôõöùúûüýÿ?,"; for($i = 0; $i < strlen($bad); $i++) { $var = str_replace($bad[$i], "", $var); } $replace = array("æ" => "ae", "ø" => "oe", "å" => "aa", "Æ" => "Ae", "Ø" => "Oe", "Å" => "AA", " " => "_"); while(list($key, $value) = each($replace)) { $var = str_replace($key, $value, $var); } $var2 = explode(".", $var); $ext = count($var2) > 1 ? ".".array_pop($var2) : ""; $var = implode("", $var2) . $ext; return $var; }
Du kunne jo bare fjerne all og så indsætte et . på 4.-sidsteplads
galaxy, og hvis extension ikke er på 3 tegn?
Mht sikkerhed, så har du vel også overvejet at visse filtyper kan være farlige, hvis brugerne kan tilgå mappen med uploadede filer?
Det er ikke i sig selv farligt at give brugere adgang til at uploade filer.. det er farligt at give brugere ret til at afvikle filer..
Hvis der ikke tages forholdsregler, kan en bruger kalde de .php filer han uploader
ikke hvis der er lukket for at afvikle filer (og scripts) i den mappe filerne uploades til....
btw - svaret på dit spørgsmål må være at løbe strengen igennem og fjerne alle punktummer med mindre det er det sidste punktum.. er ikke super stærk i php, så kan ikke sætte et eksempel op.
function removeAllButLast($haystack, $needle) { $lastNeedle = strrpos($haystack, $needle); if ($lastNeedle) { return str_replace('.', '', substr($haystack, 0, $lastNeedle)) . substr($haystack, $lastNeedle); } else return $haystack; }
07. juni 2005 - 22:54
#10
RETTELSE: function removeAllButLast($haystack, $needle) { $lastNeedle = strrpos($haystack, $needle); if ($lastNeedle) { return str_replace($needle, '', substr($haystack, 0, $lastNeedle)) . substr($haystack, $lastNeedle); } else return $haystack; }
07. juni 2005 - 23:03
#11
Man kan også: $file_name = $_FILES['upld_file']['name']; $typen = end(explode(".", $file_name)); // Finder filtypen $filnavn = substr($file_name, 0, -strlen($typen)); // Finder if(empty($filnavn)) { $filnavn = $file_name; } if($typen == $filnavn) { $typen = ""; } if(substr($filnavn, -1, 1) !=".") { $filnavn = $filnavn ."."; } $filnavn = badchar($filnavn); $filnavn = $filnavn . $typen;
11. juni 2005 - 03:01
#12
sukos: Det var lige den jeg manglede. lig et svar så er der point.
11. juni 2005 - 18:27
#13
jahh, ok
11. juni 2005 - 18:46
#14
Et punktum er da vist ikke et specielt ulovligt tegn i et filnavn. Både Windows og Linux acceptere det.
Vi tilbyder markedets bedste kurser inden for webudvikling