Märkligt fenomen med å, ä och ö i PHP-filer.

Permalänk

Märkligt fenomen med å, ä och ö i PHP-filer.

Jag vet inte om det här hör hemma just här, men då det känns som att detta handlar om PHP eller HTML skriver jag här.

Det är i alla fall så att jag snart blir galen på ett mycket irriterande problem som jag omöjligt kan finna en lösning på eller ens en förklaring om varför problemet ens uppstår. Jag har nu råkat ut för detta vid två tillfällen. Första gången var för ett par månader sedan då jag laddade ner en kompis hemsida för att hjälpa henne med ett problem. Hennes filer vad skapade i html och jag skulle ändra detta till PHP till att börja med. När jag hade gjort detta och laddat upp sidan på min testserver, visade det sig att alla å, är och ö hade konstiga tecken. Jag felsökte genom att ska ner koden, men kunde inte hitta problemet. Jag skalade till och med ned koden till att sidan bara innehöll å ä ö, men ändå blev det fel tecken. Jag konstaterade då att problemet inte inte låg i koden i textfilen. Mitt nästa test var att klippa ut koden i orginalfilen, radera den filen, klistra in koden i ett helt nytt dokument som jag sedan sparade med samma namn som orginalfilen. Då visades å, ä och ö korrekt. Filen var identiska när det gäller textinnehållet med koder och text. Längre än så här kom jag inte och eftersom det bara rörde sig om några filer, gjorde jag så här med de resterande filerna för att få till det och lämnade detta frustrerande fenomen.

Häromdagen stötte jag på det här problemet igen och eftersom det inte bara kommer att röra sig om några enstaka filer vill jag verkligen veta vad det här handlar om. Jag har börjat använda Ant Movie Catalog, för att lägga upp en lista på filmer som vi har sett och ska göra egna recensioner på dessa, för att sedan exportera dessa som php-filer. De exporterade filerna visar inte å, ä eller ö, utan det blir konstiga tecken i stället. Jag kan göra som ovan, alltså kopiera in innehållet i en ny fil med samma namn, men att göra det efter varje film, känns inte som någon bra idé.

Visserligen är det bara att söka efter dessa tecken i alla filer i mappen och ersätta de med specialtecken. Så har jag gjort med övriga filer på hemsidan. Men meningen är att pojkvännen ska använda AMC och lägga in filmer och det är jag som håller på med själva hemsidesskapandet. Vi vill ju att det här med å, ä och ö ska fungera direkt när han laddat upp filerna och inte först när jag går in och redigerar. Dessutom kan jag inte stå ut med tanken på att något sker som jag inte begriper mig på ett dugg.

Det enda som det här kan bero på är i själva filen i sig, inte i innehåller i filen. Jag vet t ex att jag kan skriva en ren textfil i Windows, t ex ett script, som jag sedan för över till linux, men så fungerar det inte förrän jag har konverterat det med ett program vars namn jag har glömt just nu. Trots att filer är identiska för blotta ögat har Windows lagt till nåt i egenskaper eller vad det nu kan vara.

Jag kan också utesluta Dreamweaver som orsak till problemet, för jag har uteslutit Dreamweaver och använt FTP-klient i stället. Problemet uppstår oavsett om jag exporterar till PHP eller HTML.

Är det någon som har nån aning om vad detta handlar om och kan förklara det för mig?

Permalänk
Medlem

Problemet lär ligga i character encoding. Kan nästan lova att din webserver använder sig av UTF-8, och att du inte har sett en själv. Dvs så kommer UTF-8 användas.

Tack vare detta så kommer dina åäö inte fungera då de inte ligger i samma adress rymd. När det gäller PHP också så går det INTE bra att spara om filerna till UTF8 i t.ex. notepad heller då den inte hanterar de extra 3 byten som kommer i början av filen, Det går att göra förvisso, sedan använda en hex editor och ta bort dem men bara extra jobb.

Vad du kan göra är, att byta ut alla åäö med sitt respektive html code,dv.s. Ä med t.ex. Ä http://www.ascii.cl/htmlcodes.htm
Eller säga att ditt dokument faktiskt använder Latin1. (minns ej iso numret ) men jag rekommenderar hellre det första och fortsätta använda UTF8.

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift

Permalänk
Medlem
Skrivet av MugiMugi:

Tack vare detta så kommer dina åäö inte fungera då de inte ligger i samma adress rymd. När det gäller PHP också så går det INTE bra att spara om filerna till UTF8 i t.ex. notepad heller då den inte hanterar de extra 3 byten som kommer i början av filen, Det går att göra förvisso, sedan använda en hex editor och ta bort dem men bara extra jobb.

Alla vettiga textredigerare kan spara UTF8-filer utan Byte Order Mark.

Permalänk
Medlem

Hade liknade problem för ett tag sen också. Men fick hjälp här på forumet.
Det var så att man behöver har UTF-8 "formatet" och det hade jag inte ställt
in i notepad++.

Visa signatur

Äger en sån där PC sak men en KNAPP på?

Permalänk

Tack för alla svar. Det känns som att det här problemet är något som jag inte kan påverka, alltså olösligt. Servern, dreamweaver och även Notepad++ är inställd att använda UTF-8. Efter svaren jag har fått här såg jag att det finns inställning för encoding i Ant Movie Catalog och där finns inte ens UTF-8 som val. Filerna jag exporterar från den programvaran är alltså iso-8859-1 och det kan jag inte ändra. Så antingen måste jag göra någon form av konvertering efteråt eller hitta ett liknande program som kan exportera med UTF-8. Det senare låter bättre, för jag använder programmet för att det ska vara enkelt och med fler extra steg förloras syftet. Dessutom tvingas jag redan redigera länkarna i efterhand eftersom jag använder formen ?p=folder/filename och från detta programmet kan jag bara få ?p=filename.php

Så nu är det bara att ut och leta efter ett bra filmkatalogprogram som kan exportera för webben.

Permalänk
Medlem
Skrivet av suzanne68:

Tack för alla svar. Det känns som att det här problemet är något som jag inte kan påverka, alltså olösligt. Servern, dreamweaver och även Notepad++ är inställd att använda UTF-8. Efter svaren jag har fått här såg jag att det finns inställning för encoding i Ant Movie Catalog och där finns inte ens UTF-8 som val. Filerna jag exporterar från den programvaran är alltså iso-8859-1 och det kan jag inte ändra. Så antingen måste jag göra någon form av konvertering efteråt eller hitta ett liknande program som kan exportera med UTF-8. Det senare låter bättre, för jag använder programmet för att det ska vara enkelt och med fler extra steg förloras syftet. Dessutom tvingas jag redan redigera länkarna i efterhand eftersom jag använder formen ?p=folder/filename och från detta programmet kan jag bara få ?p=filename.php

Så nu är det bara att ut och leta efter ett bra filmkatalogprogram som kan exportera för webben.

Om du exporterar datan till en textfil är det väldigt enkelt fixat i Notepad++

1. tryck CTRL + H och ersätt \?p=[^/]+(.+) med ?p=\1. Försäkra dig om att ersättningstypen är regex
2. välj "Convert to UTF-8 (no BOM)" ur menyn

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Hedersmedlem

På Linuxsidan kan du konvertera från Latin-1 (aka ISO-8859-1) till UTF-8 med t ex iconv (recode är ett annat alternativ om det finns installerat). Exempel:

$ echo "åäö" > test.utf-8 $ file test.utf-8 test.utf-8: UTF-8 Unicode text $ iconv -f iso-8859-1 -t utf-8 --output test.iso-8859-1 test.utf-8 $ file test.iso-8859-1 test.iso-8859-1: ISO-8859 text

Har du ett fancy FTP-program kanske du kan ange direkt däri att du vill köra iconv på överförda filer.

Du kan förvandla alla förekomster av "?p=filename.php" till "?p=folder/filename" i filen index.html med t ex:

$ sed -i 's#?p=\([^"]\+\)\.php"#?p=folder/\1"#g' index.html

Sparas nedanstående som fil "konvertera.sh":

#!/bin/sh while [ ${#} -gt 0 ]; do #Måste använda tempfil med iconv (behövs inte med recode) iconv -f iso-8859-1 -t utf-8 --output "${1}".utf-8 "${1}" mv "${1}.utf-8" "${1}" sed -i 's#?p=\([^"]\+\)\.php"#?p=folder/\1"#g' "${1}" shift done

och den görs exekverbar ("$ chmod +x konvertera.sh") så kan alla filer konverteras, både teckenkodning och felaktiga länkar, genom att köra

$ ./konvertera.sh *.php

(där "*.php" i detta fallet innebär alla filer som slutar på ".php" i aktuell katalog. Ändras efter behov).

--

Repetitiva uppgifter som de du beskriver ska datorer göra åt dig - det är det vi har dem till .

--

Kom på att länkarna kanske bara behöver bytas ut i en enstaka fil och därmed inte behöver vara med i skriptet (kan bli ett eget skript), men vet inte hur situationen ser ut så lämnar det som ovan. Och det är inte testat, så om någon mot förmodan faktiskt kommer köra ovanstående kod så är det på ert eget ansvar att ni förstår vad den gör och att ni inte trollar bort er data.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.