---
title: "Byta ut otillåtna filtecken?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/84355-byta-ut-otillåtna-filtecken"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Bäckman"
published: "2003-08-16T12:25:31.000Z"
updated: "2009-09-21T17:09:41.000Z"
replies: 16
views: 2564
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/84355-byta-ut-otillåtna-filtecken"
---

# Byta ut otillåtna filtecken?

## #1 — Bäckman, 2003-08-16T12:25Z

Hejsan.

Jag håller på med en uploadfunktion. När en användare laddar upp en fil så ska den döpas om, och i filnamnet så ska användarnamnet på den som laddar upp filen ingå.

Mitt problem är att om man försöker ladda upp en fil med användarnamnet "Åke Vader" t.ex. så går filen inte att ladda ned sen p.g.a. Å:et. :)

Jag skulle vilja byta ut alla förbjudna bokstäver på ett snabbt och smidigt sätt. Ni får också gärna upplysa mig om vilka tecken som är tillåtna att ha i filnamn, och vilka som inte är det.

Permalänk: https://www.webforum.nu/p/84355

## #2 — pimme, 2003-08-16T12:59Z

$newName = preg_replace('/\[^a-z0-9\_-\\.\]/i', '', $name);
tar bort alla tecken som inte är a-z, 0-9, -, \_ och .
De teknena borde vara tillåtna iaf.
Vilka som är tillåtna beror nog på vilket OS servern kör.
Tänk på att kolla så att du inte får ett tomt filnamn...

Permalänk: https://www.webforum.nu/p/1139227

## #3 — Bäckman, 2003-08-16T13:29Z

Verkar kunna bli lite klurigt det där. Kanske bättre att köra den kollen på användarnamnen istället, så att man inte kan registrera ett konstigt namn.

Tack för kodsnutten iaf, den kommer till användning.

Permalänk: https://www.webforum.nu/p/1139233

## #4 — spango, 2003-08-17T15:39Z

Re: Byta ut otillåtna filtecken?

> **Bäckman skrev:**
>
> Mitt problem är att om man försöker ladda upp en fil med användarnamnet "Åke Vader" t.ex. så går filen inte att ladda ned sen p.g.a. Å:et. :)

Jodå, det går visst, bara man URL-kodar Å:et i  länken.

Permalänk: https://www.webforum.nu/p/1139847

## #5 — woppe, 2003-08-26T13:00Z

eller så kan du använda urlencode() det gör jag.
ex:
$foo = Ä Ä;
echo urlencode($foo);
blir typ %AE%20%AE

Permalänk: https://www.webforum.nu/p/1140209

## #6 — MickeA.com, 2009-09-17T20:14Z

Har den här funktionen för att skapa "snygga" filnamn:

```php
function fixname($fname = ""){
	$match    = array('Å', 'Ä', 'Ö', 'å', 'ä', 'ö', ' ');
	$replace  = array('a', 'a', 'o', 'a', 'a', 'o', '_');
	
	$fname = strtolower($fname);
	$fname = str_replace($match, $replace, $fname);
	return preg_replace('/[^a-z0-9\._\-]/i', '', $fname); 
}
```

Men åäö ÅÄÖ tas bort helt och ersätts in av aao AAO. Kommenterar jag bort *preg_replace()* så står det ändå åäö ÅÄÖ i namnet.

Vad är fel? Kan det ha med teckenkodning att göra?

Permalänk: https://www.webforum.nu/p/2202374

## #7 — Pedda, 2009-09-17T21:03Z

Detta bör fungera

```php
function fixname($fname){
    $match    = array('Å', 'Ä', 'Ö', 'å', 'ä', 'ö', ' ');
    $replace  = array('a', 'a', 'o', 'a', 'a', 'o', '_');
    return str_replace($match, $replace, $fname);
}  

echo fixname('Åke Östangård');
```

/red 
Osäker på andra system, men i Windows är följande tecken ogiltiga i filnamn.
\< \> : " / \\ \| ? \*

Permalänk: https://www.webforum.nu/p/2202387

## #8 — MickeA.com, 2009-09-17T21:07Z

> **[Pedda skrev:](https://www.webforum.nu/p/1481111)**
>
> Detta bör fungera
>
> ```php
> function fixname($fname){
>     $match    = array('Å', 'Ä', 'Ö', 'å', 'ä', 'ö', ' ');
>     $replace  = array('a', 'a', 'o', 'a', 'a', 'o', '_');
>     return str_replace($match, $replace, $fname);
> }  
> 
> echo fixname('Åke Östangård');
> ```
>
> 
> 
> /red 
> Osäker på andra system, men i Windows är följande tecken ogiltiga i filnamn.
> \< \> : " / \\ \| ? \*

Nej, blir exakt samma sak. Men det kvittar egentligen, eftersom jag måste ha min preg_replace för att andra specialtecken osv. ska tas bort.

Sitter just nu och testar på Apache på Windows, spelar det någon roll?

Permalänk: https://www.webforum.nu/p/2202388

## #9 — Pedda, 2009-09-17T21:10Z

Testade också nu på Apache och Windows.
Funkar fint för mig.

Permalänk: https://www.webforum.nu/p/2202389

## #10 — MickeA.com, 2009-09-18T06:07Z

Testa gärna det här på din server där det funkar:

```php
function fixname($fname = ""){
	$match    = array("Å", "Ä", "Ö", "å", "ä", "ö", " ", "  ");
	$replace  = array("a", "a", "o", "a", "a", "o", "_", "__");
	
	$fname = strtolower($fname);
	$fname = str_replace($match, $replace, $fname);
//	$fname = preg_replace('/[^a-z0-9\._\-]/i', '', $fname); 
	return $fname;
}

if($handle = opendir("./galleri")) {
	$files = array();
	$notlisted = array(".", "..");
	while (false !== ($file = readdir($handle))) {
		$path_parts = pathinfo($file);
		if(!in_array($file, $notlisted)){
			echo fixname($file) . "<br />";
		}
	}
}
```

Har det med att göra att jag listar filer? Det jag ska göra är att "indexera" bilder i en mapp och döpa om alla m.h.a *rename()* men först måste jag få det här att fungera.

Ska testa senare hur det blir om jag kör det under FreeBSD.

Permalänk: https://www.webforum.nu/p/2202402

## #11 — Pedda, 2009-09-18T11:12Z

Funkade inte för mig heller när man loopade filer.
Löste det med htmlentities().

```php
<?php 
function fixname($fname){
    $match    = array('&aring;', '&auml;', '&ouml;', ' ');
    $replace  = array('a', 'a', 'o', '_');
    return str_replace($match, $replace, strtolower($fname));
} 

if($handle = opendir("./galleri")) {
    $files = array();
    $notlisted = array(".", "..");
    while (false !== ($file = readdir($handle))) {
        $path_parts = pathinfo($file);
        if(!in_array($file, $notlisted)){
            echo fixname(htmlentities($file)) . "<br />";
        }
    }
}  
?>
```

Permalänk: https://www.webforum.nu/p/2202441

## #12 — MickeA.com, 2009-09-18T11:27Z

Aha! Då kanske det beror på att koden är UTF-8 och att filsystemet kör nån annan kodning? Ska prova, tack!

Permalänk: https://www.webforum.nu/p/2202445

## #13 — Pedda, 2009-09-19T10:56Z

Om det fungerar för dig så kan du markera rätt svar med "Markera som lösning" så är det lättare för andra med samma problem att hitta lösningen.

Permalänk: https://www.webforum.nu/p/2202546

## #14 — MickeA.com, 2009-09-19T11:19Z

> **[Pedda skrev:](https://www.webforum.nu/p/1481288)**
>
> Om det fungerar för dig så kan du markera rätt svar med "Markera som lösning" så är det lättare för andra med samma problem att hitta lösningen.

Hade jag självklart gjort, om det var jag som startat tråden från början :)
Sökte innan och "kapade" den här istället för att skapa en egen.

Permalänk: https://www.webforum.nu/p/2202549

## #15 — Pedda, 2009-09-19T11:22Z

Missade det.  (y)
Hoppas att det fungerar för dig iaf.  :)

Permalänk: https://www.webforum.nu/p/2202551

## #16 — Illius, 2009-09-21T16:40Z

Är det inte bättre att sätta ut ID:n på användaren ist för användarnamnet...? tänker mig att det kanske kan bli stora fel i längden annars.

Permalänk: https://www.webforum.nu/p/2202725

## #17 — MickeA.com, 2009-09-21T17:09Z

> **[Illius skrev:](https://www.webforum.nu/p/1481489)**
>
> Är det inte bättre att sätta ut ID:n på användaren ist för användarnamnet...? tänker mig att det kanske kan bli stora fel i längden annars.

Va?

/r Jaha, du menar ursprungsinlägget, trodde du syftade på något jag skrev tidigare.

Permalänk: https://www.webforum.nu/p/2202728

---

Tråden på webben: https://www.webforum.nu/amne/php/84355-byta-ut-otillåtna-filtecken
