Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2315 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  php template rtf en arabe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

php template rtf en arabe

n°2250942
oppenzero
Posté le 16-02-2015 à 14:12:29  profilanswer
 

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.
 
 
 

mood
Publicité
Posté le 16-02-2015 à 14:12:29  profilanswer
 

n°2250954
rufo
Pas me confondre avec Lycos!
Posté le 16-02-2015 à 16:34:21  profilanswer
 

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
n°2250978
oppenzero
Posté le 17-02-2015 à 01:05:29  profilanswer
 

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.

n°2251000
rufo
Pas me confondre avec Lycos!
Posté le 17-02-2015 à 10:00:17  profilanswer
 

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
n°2251011
oppenzero
Posté le 17-02-2015 à 11:47:08  profilanswer
 

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
n°2251694
bbalet
Posté le 25-02-2015 à 14:33:23  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  php template rtf en arabe

 

Sujets relatifs
Problème à l'installation d'un template JoomlaMetro UI Blogger Template Gratuit
Recherche template de blog avec menu fixeA l'aide !! template hastable et iterateurs [Résolu]
Enlever le virgule arabeRecherche d'un template wordpress simple et épuré
template matching opencvUn template à partir d'un fichier xls ?
intégration de code html/javascript dans un templateTemplate Joomla garage
Plus de sujets relatifs à : php template rtf en arabe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR