code voor het verzenden van het word document naar de client pc:
header ("Pragma:public");
header("Expires:0");
header ("Cache-Control: must-revalidate,post-check=0,pre-check=0");
header ("Cache-Control:private",false);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$new_file");
header("Content-Type: application/msword;charset=UTF-8");
header("Content-Transfer-Encoding: binary");
// read the file from disk
readfile($new_file);
Al geprobeerd:
- mb_internal_encoding("Windows-1252"); of mb_internal_encoding("UTF-8") toegeveoegd aan men code
- header("Content-Type: application/msword;charset=UTF-8"); -> charset=... verwijderd of aangepast naar Windows-1252
Iemand een idee hoe ik dit kan oplossen? Dank op voorhand!
thx voor de reply, maar het zijn bestaande word documenten waarin ik bookmarks verander met bepaalde gegevens. Ik maak dus geen word aan in php, ik open enkel een word document, vervang er vanalles in en stuur het dan door naar de client.
is dan misschien
<?php
$wordmodifier->voegtekstin(utf8_decode($string));
?>
bottomline blijft, dan je de tekenset van de strings die je (op een of andere manier) in dat word-document duwt, in de juiste tekenset moet zetten.
Als je 2 tekens krijgt op de plek waar je een letter met accent verwacht, dan moet je van een multibyte tekenset (utf) naar een single byte versie. Bijvoorbeeld Windows-1252
Ik maak dus geen word aan in php, ik open enkel een word document, vervang er vanalles in en stuur het dan door naar de client.
Dit klinkt als een character encoding probleem (hierna afgekort als CE).
Maak je hierbij gebruik van een database als tussenstap (en zoniet, waarom niet? :) het managen van bookmarks lijkt mij makkelijker via een webapplicatie/database dan elke keer een Word bestand uitlezen)?
Indien je gebruik maakt van een MySQL-database, maak je hierbij gebruik van een set_charset() functie-/methode-aanroep bij connecten? Anders is het niet expliciet gespecificeerd welke CE je gebruikt.
Zijn alle CEen verder gelijk? Brondata, databasetabellen en -kolommen, database-connectie, HTML-document en/of headers van andere formaten?
Er kunnen een aantal dingen aan de hand zijn:
- je brondata is (op een gegeven moment) niet meer van de CE die deze zegt te zijn (aka corrupte data)
- er gaat iets mis in de vertaling van CE A naar CE B
- maak je gebruik van functies die niet CE-aware zijn (dit zijn er in PHP een hoop)
Ik zou beginnen bij de bron (de Word-bestanden en/of de database indien je die gebruikt). Is de data van de CE die deze zegt te zijn? Dit kun je redelijk gemakkelijk nagaan door een stukje tekst met exotische karakters te pakken en dan te kijken wat hier uitkomt als je deze passage door de functie bin2hex() haalt. Deze functie is verder niet CE-aware, maar dat is juist wat je wilt. De hexadecimale code die hier uitrolt zal ongeacht welke CE je op dat moment gebruikt hetzelfde zijn. Vervolgens zorg je er op een of andere manier voor dat je het stukje tekst reproduceert op een kloppende manier, zodat je weet hoe de hexadecimale representatie eigenlijk zou moeten zijn. Vervolgens gooi je deze passage ook door de functie bin2hex(). Indien deze twee passages gelijk zijn weet je dat op dat moment de CEen in ieder geval overeenkomen en het probleem op een andere plek zit.