11. april 2023 - 16:10Der er
20 kommentarer og 1 løsning
tvinge charset på websider i php
Jeg har flyttet et site til en anden server og nu vises æøåÆØÅ osv som rhomber. Det mystiske er at når jeg ændrer ext på index.php til index.html bliver æøå vist rigtigt. Jeg bruger ISO_8859-1, da utf8 ikke giver det.
Jeg har prøvet at tvinge php sider til at vise 8859-1 med header('Content-Type: text/html; charset=ISO_8859-1'); og det virker. MEN der er rigtig mange undermapper med filer, så det er ikke overkommeligt at ændre alle.
Jeg har prøvet med en htaccess fil AddDefaultCharset ISO_8859-1 det ændrer ikke noget
jeg har prøvet at tilføje ini_set('default_charset', 'ISO_8859-1'); i php konfigurationen, men heller det virker.
Det må være at fortælle server centralt at åbne alt som 8859-1 ?
Hvis det er php-filer, så er der jo også en vis sandsynlighed for, at teksten ligger i en mysql-database, og så er vejen frem måske at få dén rettet til i stedet?
Nogle editorer kan skifte tegnsæt sådan at hvis en fil åbnes med det tegnsæt som filen er lavet i, så kan der skiftes - filen blivet markeret ændret der gemmes i det valgte - mener JEdit kunne.
og så lærte vi idag at Content-Type med charset ifølge visse kilder, for browsere, overruler html meta tag - tankevækkende at det ikke virkede med php headeren. Det er i sådanne situationer jeg konkluderer ved at teste med curl
MEN nu har jeg fundet det i Plesk. under indstiller for apache og nginx kunne jeg tilføje additional headers: Content-Type: text/html; charset=ISO_8859-1 gjorde det.
Mig der takker - eksperten drukner ikke ligefrem i gode spørgsmål. Vedr 100 filer: Som chatGPT kan kundgøre er konverteringer noget der lettest overlades til de rette tools - Groovy er boilerplate befriet java.
Here's an example Groovy script that converts all files with a given extension in a folder from ISO-8859-1 to UTF-8 encoding:
import java.nio.charset.*
// Define the folder path and file extension def folderPath = "/path/to/folder" def fileExtension = ".txt"
// Get a list of files in the folder with the given extension def files = new File(folderPath).listFiles().findAll { it.isFile() && it.name.endsWith(fileExtension) }
// Loop through the files and convert them from ISO-8859-1 to UTF-8 files.each { file -> def sourceContent = file.text(encoding: Charset.forName("ISO-8859-1")) file.text = sourceContent.encode(Charset.forName("UTF-8")) }
Ja - HTTP header overruler META tag. Og umiddelbart virker det jo dybt mystisk at en server setting overruler et tag i en fil. Men der er lidt logik i det.
HTTP header er en pæn løsning set fra browser side: - browser læser headers og bytes->chars er nemt da det er ASCII - browser ser encoding i header - browser læser body og bruger encoding til at lave bytes->chars
META tag er noget rod set fra browser side: - browser læser headers og bytes->chars er nemt da det er ASCII - browser ser ingen encoding i header - browser laver et gæt på encoding og læser første del af body og bruger den gættede encoding til at lave bytes->chars - browser finder META tag og en encoding - browser genfortolker allerede læste bytes med den nu kendte encoding - browser fortsætter med at læse resten ag bytes med den nu kendte encoding
Så man favoriserer den pæne løsning over den rodede løsning.
Man rammer muligheden for at html dokumentet kan være i en encoding og @charset indledt css files i en anden ved at lade header definer encoding for html'en og undlade meta tag. https://developer.mozilla.org/en-US/docs/Web/CSS/@charset 🕵🕵🕵🕵🕵 i en iso8859-1
Synes godt om
Ny brugerNybegynder
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.