---
title: "Ersätta å, ä, ö samt mellanslag med tecken?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/185351-ersätta-å-ä-ö-samt-mellanslag-med-tecken"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "patrikdanielsso"
published: "2010-11-23T08:38:48.000Z"
updated: "2010-11-24T11:41:29.000Z"
replies: 16
views: 1681
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/185351-ersätta-å-ä-ö-samt-mellanslag-med-tecken"
---

# Ersätta å, ä, ö samt mellanslag med tecken?

## #1 — patrikdanielsso, 2010-11-23T08:38Z

Hej,

Jag har hittat ett gammalt PHP-script på internet, på något forum som listar alla mappar och filer i en viss mapp som man anger.

Det funger faktiskt helt okej, förutom att å, ä, ö och mellanslag i filerna och mapparna skrivs ut, och då vill inte alla webbläsare hitta filen.

Så här ser det ut i koden som ska skriva ut:

```
<a href="{$_SERVER.PHP_SELF}?download={$cwd}{$file.name}" target="_blank">{$file.name}</a>
```

Och här är koden för anropet:

```
if ($_REQUEST['download']) {
	$basepath = realpath(FILE_PATH).'/';
	$filepath = realpath(FILE_PATH.urldecode($_REQUEST['download']));
	if (substr($filepath,0,strlen($basepath))!=$basepath) die('Invalid filename');

	if (!is_readable($filepath)) die('Cannot access file');

	if ( (!defined('FILE_URI')) || (!FILE_URI) ) {
		send_file($filepath);
	} else {
		$uri = FILE_URI.substr($filepath,strlen($basepath));
		Header('Location: '.$uri);
	}

	die;
}
```

Kan man på något enkelt sätt lägga in så att å ä ö och mellanslag ersätta med de korrekta html-tecken i länken?

Jag är rätt ny på PHP så var snäll mot mig  :bire

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

## #2 — patrikdanielsso, 2010-11-23T09:31Z

Eller kan någon förklara varför det går att ladda ner en fil i firefox, men inte via Internet Explorer? IE tar bort alla å ä ö från adressraden, medans firefox ersätter dom med HTML-tecken.

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

## #3 — Xertoz, 2010-11-23T11:30Z

I PHP så finns funktionerna [urlencode](http://se2.php.net/urlencode) och [htmlspecialchars](http://se2.php.net/htmlspecialchars) som passar (spec urlencode) för detta och liknande ändamål.

Men koden du pastear överst ser ut att vara i template-form skrivet för [smarty](http://www.smarty.net/) eller liknande system, och därför kan det vara användbart att använda sig av modifiers för just urlencode i detta fall. Om jag minns rätt så bör följande kodstycke eventuellt lösa ditt problem:

```
<a href="{$_SERVER.PHP_SELF}?download={$cwd|urlencode}{$file.name|urlencode}" target="_blank">{$file.name|htmlspecialchars}</a>
```

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

## #4 — patrikdanielsso, 2010-11-23T12:10Z

Tack för svaret.

Jag provade den där koden, och den ersätter numera mellanrum med +, och då hittar den inte filen heller verkar det som. Jag kan inte begripa varför originalkoden funkar så himla bra med firefox, safari och andra webbläsare, men inte med IE.

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

## #5 — Xertoz, 2010-11-23T12:14Z

Problemet ligger delvis i hur länkarna ges men även i teckenkodning för sidan. Är lite svårt att säga mer utan direkt sikt över helheten.

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

## #6 — patrikdanielsso, 2010-11-23T12:31Z

Jag använder iso-8859-1 idag, är utf-8 bättre? Dessutom har jag läst att det kan ha betydelse för hur man laddar filerna, i vilket program.

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

## #7 — Xertoz, 2010-11-23T12:41Z

Vilken teckenkodning du använder dig av spelar mindre roll så länge de tecken du nyttjar finns stödda. Däremot så kan webbläsare tolka din sida olika om du har dåligt definerad teckenkodning. Jag säger inte att det är här som problemet ligger, men det är inte en alltför ovanlig anledning. Det borde dock vara fler fel än denna länk på sidan om så är fallet.

Ett snabbt sätt att kontrollera detta är att visa sidinformationen i de webbläsare som sidan fungerar i, och jämföra vad de anser att det är för teckenkodning mot de webbläsare som sidan inte fungerar i. Om båda överensstämmer med vad din kod använder och rapporterar för teckenkodning så ligger inte problemet här.

I övrigt så bör åäö ha blivit satta till korrekta %-värden i länken. Har du tittat i källkoden för den producerade länken?

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

## #8 — patrikdanielsso, 2010-11-23T12:56Z

Låt mig ge ett exempel.

Denna länk klickar jag på i både FF och IE:

```
index.php?download=/Säkerhetsdatablad/Övrigt/Aceton.pdf
```

FF genererar då följande och PDF:en visas korrekt:

```
/S%E4kerhetsdatablad/%D6vrigt/Aceton.pdf
```

Medans IE genererar följande och PDF:en hittas inte:

```
/Skerhetsdatablad/vrigt/Aceton.pdf
```

I FF kollar jag på egenskaper för min hemsida:
Renderingsläge: Strikt enligt standard
Kodning: ISO-8859-1

I IE hittar jag inte vart man ser denna informatio, men högerklickar jag ser jag att Västeuropeiska (ISO) är valt per automatik.

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

## #9 — Xertoz, 2010-11-23T13:02Z

```
urlencode('/Säkerhetsdatablad/Övrigt/Aceton.pdf'); // genererar: %2FS%C3%A4kerhetsdatablad%2F%C3%96vrigt%2FAceton.pdf
```

Använd urlencode.

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

## #10 — patrikdanielsso, 2010-11-23T13:10Z

Nu provade jag följande:

```
<a href="{$_SERVER.PHP_SELF}?download={$cwd|urlencode}{$file.name|urlencode}" target="_blank">{$file.name}</a>
```

Den genererar då följande länk:

```
index.php?download=%2FS%E4kerhetsdatablad%2F%D6vrigt%2FAceton.pdf
```

FF funkar fint som vanligt, IE hittar inte filen:

```
/Skerhetsdatablad/vrigt/Aceton.pdf
```

Uppskattar hjälpen!

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

## #11 — patrikdanielsso, 2010-11-23T13:21Z

Jag vill också tillägga att jag har följande kod i början av index.php, om det är till någon hjälp.

```
<!DOCTYPE html 
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
	<title>File Manager</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
</script>
	<meta http-equiv="content-type" content="text/xhtml-xml; charset=iso-8859-1">
</head>
```

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

## #12 — Xertoz, 2010-11-23T13:26Z

Kom precis på, om du skickar med non-ASCII i $uri så kan följande rad orsaka problemet:

```
Header('Location: '.$uri);
```

Har du tur så löser urlencode($uri) problemet men misstänker att så ej är fallet. Nåja, bara att läsa upp dokumentation för header.

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

## #13 — patrikdanielsso, 2010-11-23T13:38Z

Hur menar du med "läsa upp dokumentation för header"? Jag är rätt ny på PHP, så jag lär mig fortfarande.

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

## #14 — patrikdanielsso, 2010-11-23T13:45Z

Hittade denna när du nämnde header:

```
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Cache-Control: no-store, no-cache, must-revalidate");
	header("Cache-Control: post-check=0, pre-check=0", false);
	header("Pragma: no-cache");
	header('Content-type: ' . get_file_mimetype($filepath));
	if (!$inline) header('Content-Disposition: attachment; filename="'.$filename.'"');
	header("Content-Transfer-Encoding: binary");
	header("Content-Length: ".filesize($filepath));
```

Kan detta ha något att göra med mitt problem?

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

## #15 — Xertoz, 2010-11-23T13:52Z

Som sagt, lite svårt att lösa något med bara fraktioner av systemet. Men min nuvarande gissning ligger på att du nu har ett problem med följande rad kod (se din första post):

```
Header('Location: '.$uri);
```

Det går inte riktigt att skicka med vilka tecken som helst till [header()](http://se.php.net/manual/en/function.header.php) hur som helst.

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

## #16 — patrikdanielsso, 2010-11-23T14:11Z

Okej, och du har ingen tips på hur man kan lösa det? Någon speciell kod du behöver se? Man blir lätt galen när man försökt med alla knep känns det som.

Det som stör mig mest är att det bara verkar vara problem med IE, inte med någon annan webbläsare.

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

## #17 — patrikdanielsso, 2010-11-24T11:41Z

Det verkar som att urlencode även gör om "/" till html-tecken, vilket är synd då det blir fel. Kan  man göra så att urlencode inte omvandlar just /?

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

---

Tråden på webben: https://www.webforum.nu/amne/php/185351-ersätta-å-ä-ö-samt-mellanslag-med-tecken
