php template rtf en arabe

php template rtf en arabe - PHP - Programmation

Marsh Posté le 16-02-2015 à 14:12:29    

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

Code :
  1. echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
  2. $myContent = file_get_contents("modele.rtf" );
  3. //$myContent = str_replace("@nom@",html_entity_decode($nom),$myContent);
  4. //$nom = utf8_encode($nom);
  5. //$nom = base64_encode($nom);
  6. $nom = htmlspecialchars($nom) ;
  7. //$myContent = str_replace("@nom@",$nom,$myContent);
  8. $myContent =mb_ereg_replace("@nom@",$nom,$myContent);
  9. $newFileHandler = fopen("../impression/".$nf.".rtf","a" );
  10. fwrite($newFileHandler,$myContent);
  11. 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
Y’a-t-il une fonction qui effectue cette codification.
Merci.
 
 
 

Reply

Marsh Posté le 16-02-2015 à 14:12:29   

Reply

Marsh Posté le 16-02-2015 à 16:34:21    

Toi, tu lui envoies quoi comme chaine en arabe (quels codes UTF-8) ? Si t'envoies un truc du genre c8d3c7e3, b'en tu n'auras plus qu'à faire les échappements de caractères comme le doc rtf l'attend ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-02-2015 à 01:05:29    

merci pour votre réponse. je lui envoie la chaine " بسام" en UTF-8 qu'il écrit "en dur" sur le fichier. comment décomposer cette chaine en \'c8\'d3\'c7\'e3  (c'est quoi d’ailleurs comme codage ? unicode ?)
avc mon code j'ai pas eu de problèmes avec les entiers ou les chaînes en français !
merci de m'aider.

Reply

Marsh Posté le 17-02-2015 à 10:00:17    

Je voulais savoir comment était représentée en mémoire la chaîne " بسام" ?
 
Ton truc, ça me fait penser à un pb que j'avais eu à résoudre sur une ancienne version de Mediawiki qui ne gérait pas encore l'utf-8 nativement mais qui l'émulait via un find/replace de ce genre :

Code :
  1. $ArrayUTF8ForWiki = array(
  2.                           'ToReplace' => array('à', 'ç', 'è', 'é', 'ê', 'ë', 'î', 'ï', 'ô', 'ö', 'ù'),
  3.                           'Replacement' => array('u8c3a0', 'u8c3a7', 'u8c3a8', 'u8c3a9', 'u8c3aa', 'u8c3ab', 'u8c3ae', 'u8c3af', 'u8c3b4', 'u8c3b6', 'u8c3b9')
  4.                          );


Mon find/replace ressemble fort à ta chaîne \'c8\'d3\'c7\'e3 (un simple ajout de \') ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-02-2015 à 11:47:08    

je récupère cette valeur d'un formulaire ($_POST). encodé en utf-8 (j'ai vérifié avec mb_detect_encoding) ... je sais pas comment l'UTF-8 est représenté en mémoire ..l'enregistrement en 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  

Code :
  1. function ascii2hex($ascii) {
  2.     $hex = '';
  3.     for ($i = 0; $i < strlen($ascii); $i++) {
  4.     $byte = strtoupper(dechex(ord($ascii{$i})));
  5.     $byte = str_repeat('0', 2 - strlen($byte)).$byte;
  6.     $hex.=$byte." ";
  7.     }
  8.     return $hex;
  9.     }


mais au lieu de c8d3c7e3 j'obtiens d8a8d8b3d8a7d985 !!
comment passer de  بسام à  \'C8\'D3\'C7\'E3 ???
y'a t'il un moyen de fixer l'encodage à UTF-8 au niveau du fichier RTF(ou doc)  ?
merci.


Message édité par oppenzero le 17-02-2015 à 14:41:42
Reply

Marsh Posté le 25-02-2015 à 14:33:23    

Si tu stockes بسام et que ça affiche بسام
C'est que tu stockes de l'UTF-8, mais que tu affiches de l'ISO-8859-1
 
L'UTF-8 n'utilise un seul octet pour stocker une rune si la rune appartient à l'espace ASCII-7 (anglais), et deux octets ou plus pour les autres caractères.
 
Donc toute ta logique de manipulation de la chaîne de caractères octet par octet (d'ailleurs tu appelles ta fonction utilitaire ascii2hex) est mauvaise à la base. Il faut que tu considères la chaîne non pas comme une suite d'octets, mais comme une suite de runes (une rune pouvant occuper plus d'un octet). Il existe des fonctions PHP spécialisées, mais c'est également un problème de mauvaise approche théorique.


Message édité par bbalet le 25-02-2015 à 14:34:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed