PHP -> MS WORD

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Colin Goessens

Colin Goessens

15/02/2017 09:08:37
Quote Anchor link
Hello,

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!
 
PHP hulp

PHP hulp

24/11/2024 18:43:10
 
Ivo P

Ivo P

15/02/2017 16:10:41
Quote Anchor link
ik denk dat je het moet zoeken op de plek waar je je Word document aanmaakt.

Daar staat ergens iets van

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$string
= 'met één accent';

$wordcreator->voegtekstin($string);

?>



Dat zou je kunnen aanpassen naar
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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
 
Colin Goessens

Colin Goessens

17/02/2017 06:16:06
Quote Anchor link
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.
 
Ivo P

Ivo P

17/02/2017 09:54:39
Quote Anchor link
Dat verandert dus niets aan mijn opmerking:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$wordcreator
->voegtekstin(utf8_decode($string));
?>


is dan misschien
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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
 
Thomas van den Heuvel

Thomas van den Heuvel

17/02/2017 15:04:19
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.