php template rtf en arabe

openzero
Invité n'ayant pas de compte PHPfrance

18 févr. 2015, 12:28

J’utilise le code suivant pour ecrire dans un fichier rtf (contenant du français et de l’arabe) des variables php (wampserver php version 5.03.10) contenant des chaines de caractères en arabe

    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
    $myContent = file_get_contents("modele.rtf" );
    //$myContent = str_replace("@nom@",html_entity_decode($nom),$myContent);
    //$nom = utf8_encode($nom);
    //$nom = base64_encode($nom);
    $nom = htmlspecialchars($nom) ;
    //$myContent = str_replace("@nom@",$nom,$myContent);
    $myContent =mb_ereg_replace("@nom@",$nom,$myContent);
    $newFileHandler = fopen("../impression/".$nf.".rtf","a" );
    fwrite($newFileHandler,$myContent);
    fclose($newFileHandler);


Lors de l’ouverture du fichier les caractères arabe ne s’affiche pas (بسام ) ou (ميعاوي) ou ( ????????)
En éditant manuellement le fichier résultat $nf.RTF j’ai remarqué que la chaine بسام s’écrit \'c8\'d3\'c7\'e3 (c'est quoi d’ailleurs comme codage ?)

je récupère la chaine بسام d'un formulaire ($_POST). encodé en utf-8 (j'ai vérifié avec mb_detect_encoding) ... ..l'enregistrement au niveau de la base de données ne pose pas de problème, mon problème vient du fichier RTF ma fonction écrit ceci sur le fichier:
{\rtlch\fcs1 \ab\af42\alang7169 \ltrch\fcs0 \b\f42\fs24\insrsid11479835\charrsid13048379 بسام} => affichage ميعاوي
alors que, il faut aboutir à ce résultat :
{\rtlch\fcs1 \ab\af42\alang7169 \ltrch\fcs0 \b\f42\fs24\insrsid11479835\charrsid13048379 \'C8\'D3\'C7\'E3}
J'ai trouvé la fonction suivante
    function ascii2hex($ascii) {
        $hex = '';
        for ($i = 0; $i < strlen($ascii); $i++) {
        $byte = strtoupper(dechex(ord($ascii{$i})));
        $byte = str_repeat('0', 2 - strlen($byte)).$byte;
        $hex.=$byte." ";
        }
        return $hex;
        }
mais au lieu de c8d3c7e3 j'obtiens d8a8d8b3d8a7d985 !!
comment passer de بسام à \'C8\'D3\'C7\'E3 ???
y'a t'il un moyen plus simple de fixer l'encodage à UTF-8 directement au niveau du fichier RTF(ou doc) ?
merci de m'aider.

Mammouth du PHP | 688 Messages

18 févr. 2015, 16:12

le fichier php qui génére le rtf est-il bien encodé en utf8 ?

openzero
Invité n'ayant pas de compte PHPfrance

19 févr. 2015, 16:06

Merci pour votre réponse.
Je suppose que oui
  echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
en testant la variable (echo) la variable s'affiche correctement, l'enregistrement dans la base de données également. le problème c'est le fichier RTF.
Avez vous une idée ? merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 févr. 2015, 16:47

Bonjour,

Les problèmes d'encodages de caractères sont malheureusement souvent un casse-tête.
Voici une piste pour générer du RTF : http://spin.atomicobject.com/2010/08/25 ... -with-php/
Quand tout le reste a échoué, lisez le mode d'emploi...