webForumDet fria alternativet

åäö i php?

11 svar · 474 visningar · startad av greymane

greymaneMedlem sedan juli 2001711 inlägg
#1

Jag använder readdir() i ett php-skript. Problemet är att readdir() inte läser åäö korrekt. Vad kan det bero på? Har letat i config-filer efter lämpligt direktiv men har inte lyckats hitta något. Någon som har nåt tips?
I php-forumet fick jag svaret att prova här.

fourtMedlem sedan juli 200352 inlägg
#2

Vad blir outputen? Dvs hur ser det ut när den läser. Vad exakt är det som händer?

Jag skulle kunna tänka mig att det är ett teckentabellsproblem. Sparas uppladdade filer med åäö korrekt?

greymaneMedlem sedan juli 2001711 inlägg
#3

outputen av en fil som heter åäö.jpg blir †„”.jpg

Uppladdade filer med åäö sparas korrekt. Vad är ett teckentabellsproblem? Det har jag aldrig varit ute för förut.

greymaneMedlem sedan juli 2001711 inlägg
#4

Ingen som känner till vad som kan vara fel?

tydalMedlem sedan juni 20034 013 inlägg
#5

Du har precis upptäckt varför å, ä och ö inte ska förekomma i filnamn. Det blir nämligen olika tecken på olika datorer beroende på vilken teckentabell som används.

greymaneMedlem sedan juli 2001711 inlägg
#6

Men OM det förekommer, hur hanterar jag det då?

tydalMedlem sedan juni 20034 013 inlägg
#7

Genom att byta namn på filerna.

tydalMedlem sedan juni 20034 013 inlägg
#8

Lite utförligare beskrivning av teckentabeller...

Som du kanske vet är det ju bara ettor och nollor som gäller för en dator. Därför måste alla bokstäver göras om till en viss följd av ettor och nollor. Man har bestämt sig för att till varje tecken använda max åtta stycken ettor och nollor. Det innebär att det finns maximalt 256 olika tecken (2 upphöjt till 8).

Tecknen mellan 0 och 127 är fasta och innehåller de vanligaste, dvs a-z, A-Z, 0-9 och så punkter, kolon och såna saker. Den övre delen, mellan 128 och 255 däremot, är variabel. Detta eftersom 128 tecken inte räcker så långt för alla specialtecken (tänk matematiska tecken, grekiska alfabetet, å, ä, ö osv).

Så, tanken var att varje språk skulle ha sin egen övre del, men i och med datorvärldens globalisering har det blivit ett problem. Det blir ju inte bättre av att exempelvis å, ä och ö inte bara finns i den svenska delen, utan även i andra varianter fast då på andra ställen i tabellen.

Ditt filnamn består alltså inte av bokstäver, utan av ettor och nollor. Vilka bokstäver ettorna och nollorna ska visas som står i teckentabellen. Om inte samma teckentabell används när filnamnet skapas som när det visas så kan det hända att specialtecken som å, ä och ö inte visas korrekt. De vanliga bokstäverna a-z påverkas dock inte eftersom deras platser är samma i alla tabeller.

I ditt fall är jag ganska säker på att de teckentabeller du stött på är PC8 som används i kommandotolken och som ger bokstaven å nummer 10000110 vilket i teckenuppsättningen Windows-1252 (används i Windows) motsvarar tecknet †.

greymaneMedlem sedan juli 2001711 inlägg
#9

tack för god beskrivning.

men hur byter jag namn på filerna utan att använda readdir()?

tydalMedlem sedan juni 20034 013 inlägg
#10

Byta namn på filer gör du genom filsystemet. I Windows/kommandotolken använder du kommandot ren. I Unix/Linux använder du kommandot mv.

Du kan också göra det med hjälp av php:s filsystemsfunktioner:
http://se.php.net/filesystem

Funktionen i php för att byta namn heter rename.

greymaneMedlem sedan juli 2001711 inlägg
#11

men om jag inte vet vilka filer som finns i en mapp kan jag inte använda rename. Jag måste alltså först använda readdir() eller motsv. Inte sant?

tydalMedlem sedan juni 20034 013 inlägg
#12

Precis, du kan använda readdir för att se vilka filer som finns.

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)