Avatar billede kgp43 Nybegynder
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']);
Avatar billede ksoren Nybegynder
07. juni 2005 - 08:40 #1
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;
}
Avatar billede galaxy Nybegynder
07. juni 2005 - 09:34 #2
Du kunne jo bare fjerne all og så indsætte et . på 4.-sidsteplads
Avatar billede ksoren Nybegynder
07. juni 2005 - 09:43 #3
galaxy, og hvis extension ikke er på 3 tegn?
Avatar billede ksoren Nybegynder
07. juni 2005 - 09:50 #4
Mht sikkerhed, så har du vel også overvejet at visse filtyper kan være farlige, hvis brugerne kan tilgå mappen med uploadede filer?
Avatar billede milandt Nybegynder
07. juni 2005 - 09:52 #5
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..
Avatar billede ksoren Nybegynder
07. juni 2005 - 09:55 #6
Hvis der ikke tages forholdsregler, kan en bruger kalde de .php filer han uploader
Avatar billede milandt Nybegynder
07. juni 2005 - 10:03 #7
ikke hvis der er lukket for at afvikle filer (og scripts) i den mappe filerne uploades til....
Avatar billede milandt Nybegynder
07. juni 2005 - 10:11 #8
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.
Avatar billede kargo1 Nybegynder
07. juni 2005 - 22:43 #9
function removeAllButLast($haystack, $needle) {
        $lastNeedle = strrpos($haystack, $needle);
        if ($lastNeedle) {
            return str_replace('.', '', substr($haystack, 0, $lastNeedle)) . substr($haystack, $lastNeedle);
        }
        else return $haystack;
    }
Avatar billede kargo1 Nybegynder
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;
}
Avatar billede sukos Juniormester
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;
Avatar billede kgp43 Nybegynder
11. juni 2005 - 03:01 #12
sukos: Det var lige den jeg manglede.
lig et svar så er der point.
Avatar billede sukos Juniormester
11. juni 2005 - 18:27 #13
jahh, ok
Avatar billede nielle Nybegynder
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester