PHP -> MS WORD
ik vervolledig bookmarks in een word document met gegevens uit een databank of gegevens door de gebruiker ingevoerd op het scherm.
Dit lukt perfect alleen is de gebruiker soms franstalig en deze gebruiken nogal veel het teken 'é'. In PHP wordt 'é' ingegeven maar het word document dat de server naar de gebruiker stuurt toont niet 'é' maar 'é'.
Ik weet dat dit probleem met encoding te maken heeft 'UTF-8' of 'Windows-1252', maar het lukt me niet om dit probleem op te lossen.
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!
Daar staat ergens iets van
Dat zou je kunnen aanpassen naar
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$string = 'met één accent';
$wordcreator->voegtekstin(utf8_decode($string));
?>
$string = 'met één accent';
$wordcreator->voegtekstin(utf8_decode($string));
?>
Aangenomen dat je tekensets inderdaad kloppen met de default parameters van utf8_decode()
zo niet, dan de extra parameters van de functie ook invullen
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
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
Colin Goessens op 17/02/2017 06:16:06:
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.
Gewijzigd op 17/02/2017 15:06:45 door Thomas van den Heuvel