aidez moi svp probleme php vers word

aidez moi svp probleme php vers word - PHP - Programmation

Marsh Posté le 20-12-2013 à 14:31:14    

bonsoir a tous, effectivement j'ai un problème avec php:
bon j'ai un fichier .rtf dans lequel j'ai introduit des variable de type [nom] , [prenom] , [age]
j'aime bien générer un fichier dans le quel je remplace les xxxnomxxx, xxxprenomxxx, avec des variable php, bon en français tous ce passe bien
mais lorsque les variable contient des information ecrite en arabe le fichier resultat affiche des ??????
si quelq'un peut m'aider svp c tres urgent   :??:    :??:  
  voici mon fichier php:  
 
<html>
 
 <head>
 <meta http-equiv="Content-Language" content="ar-sa">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 
<title>&#1589;&#1601;&#1581;&#1577; &#1580;&#1583;&#1610;&#1583;&#1577; 1</title>
</head>
 
<body>
 
 
<?php
//Chemin vers le fichier RTF
 
/*********************************/
     $filename="fich1.rtf";
if(file_exists($filename)){
//On ouvre le modele
$fp = fopen ($filename, 'r');
$content = fread($fp, filesize($filename));
fclose ($fp);
 
//On remplace les champs automatiques du modèle
$content=str_replace("[nom]",utf8_decode("josef" ),$content);
$content=str_replace("[prenom]",utf8_decode("متمكنتمن" ),$content);
$content=strtr("[age]","25",$content);
 
//On écrit le nouveau document word sur le disque :
 
  $fp = fopen('d:/rapport.doc', 'w');
 
fwrite($fp, $content);
fclose($fp);
}
 
?>
 </body>
 
</html>
 
 

Reply

Marsh Posté le 20-12-2013 à 14:31:14   

Reply

Marsh Posté le 20-12-2013 à 15:15:15    

Ta partie HTML ne change rien, ton fichier est encodé en quoi?

Reply

Marsh Posté le 20-12-2013 à 21:32:23    

le fichier php est encodé en UTF-8 without BOM, svp y'a t il une solution?

Reply

Marsh Posté le 24-12-2013 à 11:26:53    

Lorsque tu utilises des caractères non-ASCII, il faut que tu indiques dans ton fichier RTF le nom d'une police de caractère qui existe dans le word et contient les caractères de la langue que tu souhaites utiliser. Exemple succincte de fichier RTF qui utilise des font : http://fr.wikipedia.org/wiki/Rich_Text_Format. Les caractères unicodes doivent aussi être représenté d'une certaine manière.
 
Le mieux si tu ne veux pas te taper les specs, c'est d'éditer un fichier RTF de mettre des phrases en arabes puis de rouvrir le fichier sous un éditeur de code, pour voir à quoi ça ressemble.

Reply

Marsh Posté le 18-02-2014 à 23:21:18    

bsr, je voudrais relancer la discussion car j'ai le meme probleme :
je me suis "inspiré" d'un post pour créer un fichier RTF et réaliser un "publipostage". le document en question contient du français et de l'arabe.
 
je crée le fichier :
$myContent = file_get_contents("scr/modele.rtf" );
 $myContent = str_replace("@option@",$option,$myContent);
.....
ensuite je l'enregistre
$chemin = "impression/".$nomfichier.".rtf";
$newFileHandler = fopen($chemin,"a" );
fwrite($newFileHandler,$myContent);
fclose($newFileHandler);
 
echo "<a href='../impression/".$nomfichier.".rtf'>Telecharger document</a>";
 
le probleme le fichier comporte des symboles au lieu des caractères arabes !!! j'ai testé avec echo php reconnait le texte arabe de même avec mysql(j'ai ajoute l'instruction SET CHARACTER SET utf8)
 
j'ai essayé utf8_encode($option), ini_set($option, 'UTF-8') , htmlentities($option, ENT_QUOTES, "UTF-8" ), utf8_decode($option) rien n'y fait ...toujours des symboles ou des points d’interrogation :(
 
aidez moi SVP.

Reply

Marsh Posté le 19-02-2014 à 02:06:09    

Bon, puisque personne ne le fait, j'ai suivi mes propres recommandations.
 
1- J'ai créé un fichier vide RTF avec OpenOffice (parce que je n'ai pas word)
 
2- J'ai écrit les lignes suivantes :

Citation :

Ceci est un test.
AAA.
Ceci est un test.
إن شاء الله
Ceci est un test.


 
3- et puis j'ai sauvegardé et j'ai ouvert mon fichier dans un éditeur de texte/code et j'obtiens ça :
 

Citation :

[Début du fichier]
 
{\rtf1\ansi\deff0\adeflang1025
...
 
pleins de lignes inintéressantes
 
...
 
\f0\fs24\lang1036{\dbch\af0\rtlch \ltrch\loch
Ceci est un test.}
\par \pard\plain \s0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}
\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af7\afs24\lang1081
\loch\f0\fs24\lang1036{\dbch\af0\rtlch \ltrch\loch
AAA.}
\par \pard\plain \s0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\nowidctlpar\cf0\kerning1\hich\af5
\langfe2052\dbch\af7\afs24\lang1081\loch\f0\fs24\lang1036{\dbch\af0\rtlch \ltrch\loch
Ceci est un test.}
\par \pard\plain \s0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\nowidctlpar\cf0\kerning1\hich\af5
\langfe2052\dbch\af7\afs24\lang1081\loch\f0\fs24\lang1036{\dbch\af0\ltrch \rtlch
\u1573\'3f\u1606\'3f \u1588\'3f\u1575\'3f\u1569\'3f \u1575\'3f\u1604\'3f\u1604\'3f\u1607\'3f}

\par \pard\plain \s0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\nowidctlpar\cf0\kerning1\hich\af5
\langfe2052\dbch\af7\afs24\lang1081\loch\f0\fs24\lang1036{\dbch\af0\rtlch \ltrch\loch
Ceci est un test.}
\par }
 
[Fin du fichier]


 
La partie en gras correspond aux caractères en arabe.
\rtlch c'est pour indiquer que le sens de lecture est en right-to-left.
 
Il ne reste plus qu'à deviner ce qui est nécessaire de ce qui ne l'est pas.
 
Après avoir écrémé successivement le fichier rtf en vérifiant qu'OpenOffice acceptait bien l'ouverture du document, le fichier finit par se résumer à ça :
 

Code :
  1. {\rtf1
  2. \u1573\'3f\u1606\'3f \u1588\'3f\u1575\'3f\u1569\'3f \u1575\'3f\u1604\'3f\u1604\'3f\u1607\'3f}


 
Le lien wikipedia qui marche mieux : http://fr.wikipedia.org/wiki/Rich_Text_Format
Les specs de la version 1.5 pour comprendre comment lire et écrire en format rtf : http://www.biblioscape.com/rtf15_spec.htm


Message édité par czh le 19-02-2014 à 03:01:59
Reply

Marsh Posté le 19-02-2014 à 11:24:25    

le document est généré automatiquement; je dois effectuer les modifications à partir de PHP.  
fwrite($newFileHandler,'أبتثجحخ');  
rends le fichier inutilisable de meme lorsque j'ai change la langue du fichier source en arabe  
word me demande le codage et j'ai un fichier illisible comme ceci :
\f0\fs24\lang1036{\dbch\af0\rtlch \ltrch\loch
Ceci est un test.}
\par \pard\plain \s0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}
\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af7\afs24\lang1081
\loch\f0\fs24\lang1036{\dbch\af0\rtlch \ltrch\loch
AAA.}
 
avez vous une idée?merci.


Message édité par oppenzero le 19-02-2014 à 11:27:29
Reply

Marsh Posté le 19-02-2014 à 16:01:35    

La réponse de CZH +  [:alkatraz]  => http://stackoverflow.com/questions [...] -using-php


---------------
D3
Reply

Marsh Posté le 19-02-2014 à 20:14:40    

merci pour vos réponses mais le fichier RTF est généré dynamiquement à partir de PHP pour être imprimé par le visiteur

Code :
  1. $myContent = file_get_contents("scr/modele.rtf" );
  2. $myContent = str_replace("@option@",$option,$myContent);
  3. .....
  4. $chemin = "impression/".$nomfichier.".rtf";
  5. $newFileHandler = fopen($chemin,"a" );
  6. fwrite($newFileHandler,$myContent);
  7. fclose($newFileHandler);


donc la manipulation doit se faire au niveau du script PHP et non du fichier généré.....à mon avis le problème c'est soit fwrite soit str_replace car echo ($option) affiche correctement l'arabe
S.O.S svp j'ai tout essayé et j'y arrive pas....s'il faut changer l'extension RTF ou s'il y'a une autre méthode merci de me le signaler


Message édité par oppenzero le 20-02-2014 à 11:58:31
Reply

Marsh Posté le 20-02-2014 à 14:56:25    

toujours le même probleme :
- me donne Array a la place du contenu de la variable  :fou:  

Code :
  1. $string = 'a';
  2.     $expanded = iconv('UTF-8', 'UTF-32', $string);
  3.     $arr = unpack('L*', $expanded);
  4.     print_r($arr);


 
 
-ne trouve pas la classe Arabic..erreur fatale  :pt1cable:  

Code :
  1. <?php
  2.     include('Arabic.php');
  3.     $Arabic = new Arabic('ArGlyphs');
  4.     $text = 'بسم الله الرحمن الرحيم';
  5.     $text = $Arabic->utf8Glyphs($text);
  6.     echo $text;
  7.     ?>


 
 
-div { direction:rtl; } ....FWRITE ne l'accepte pas  
 
je suis toujours persuadé que le problème est soit fwrite soit str_replace...de l'aide SVP

Reply

Marsh Posté le 20-02-2014 à 14:56:25   

Reply

Marsh Posté le 20-02-2014 à 15:00:24    

Tu as compris qu'il fallait télécharger le fichier Arabic.php et le placer de façon a ce que ton script puisse l'inclure ?


---------------
D3
Reply

Marsh Posté le 20-02-2014 à 15:32:51    

bien sur  

Code :
  1. include ('scr/Arabic.php');


 
ou

Code :
  1. require_once 'scr/Arabic.php';


j'ai pas un message de type Failed opening 'scr/Arabic.php' for inclusion donc mon include fonctionne !
le probleme vient de cette instruction

Code :
  1. $text = $Arabic->utf8Glyphs($text);

et j'ai le message suivant Fatal error: Class 'Arabic' not found in....
 
même en appellant directement la fonction utf8Glyphs du fichier Glyphs.php j'ai le message suivant : Fatal error: Call to undefined function utf8Glyphs() in....


Message édité par oppenzero le 20-02-2014 à 15:58:04
Reply

Marsh Posté le 20-02-2014 à 17:21:48    

T'as pas l'air de comprendre l'anglais toi :/
"Failed opening 'scr/Arabic.php' for inclusion" signifie que l'include a écouhé justement, très probablement du fait que le chemin d'accès que tu spécifies n'est pas bon dans le include ou le require_once.
 
Précision : include() et require() sont très similaires, à la différence que l'include, en cas d'échec, va lever un warning alors que require va lever un fatal error. include_once() et require_once ont la même différence, simple ces 2 fonctions vérifient qu'un même fichier ne soit pas inclus plus d'une fois (ce qui occasionnerait des erreurs de fonctions déclarés plusieurs fois). Ces 2 fonctions sont donc un peu plus lentes que include et require mais rendent l'appli un peu plus "robuste" quand celle-ci grossi pas mal et que tu commence à avoir pas mal d'include et que le contexte d'inclusion peut varier.


---------------
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 20-02-2014 à 18:17:24    

je comprends pas tres bien l'anglais mais j'ai bien préçisé que

Citation :

j'ai pas un message de type Failed opening 'scr/Arabic.php' for inclusion donc mon include fonctionne !


d'autant plus que j'ai ajoute au tout debut de arabic.php l'instruction
 

Code :
  1. die("message pour verifier que l'inclusion fonctionne" );


et le message s'affiche ..l'include n'a pas échoué!
le probleme vient de cette instruction

Code :
  1. $text = $Arabic->utf8Glyphs($text);


 
et j'ai le message suivant Fatal error: Class 'Arabic' not found in.... je suis même pas sur que utf8Glyphs va résoudre mon problème..je suis toujours persuadé que le problème est soit fwrite soit str_replace qui supporte pas la langue arabe.


Message édité par oppenzero le 20-02-2014 à 18:21:10
Reply

Marsh Posté le 20-02-2014 à 19:38:05    

As-tu au moins jeté un œil à ce fichier justement ?
 
Tu pourrais t’apercevoir que le nom de la class que tu utilises n'est pas bon  :D  
 
Y'a même une doc incluse dans le zip  :o

Reply

Marsh Posté le 21-02-2014 à 10:35:37    

décidément....
j'ai pu utiliser la fonction utf8Glyphs..en vain !
pour cette variable : $text = 'بسم الله الرحمن الرحيم';
voila ce que j'obtiens dans mon fichier RTF : ﻢﻴﺣﺮﻟﺍ ﻦﻤﺣﺮﻟﺍ ï»ªï» ï»Ÿïº ﻢﺴﺑ (le sens de lecture est bien Right-to-Left)
je crois que je préfère encore les ????????????
 

Code :
  1. $myContent = file_get_contents("scr/modele.rtf" );
  2.     $myContent = str_replace("@option@",$option,$myContent);
  3.     .....
  4.     $chemin = "impression/".$nomfichier.".rtf";
  5.     $newFileHandler = fopen($chemin,"a" );
  6.     fwrite($newFileHandler,$myContent);
  7.     fclose($newFileHandler);


y'a t-il une instruction équivalente pour remplacer fwrite et une pour remplacer str_replace?

Reply

Marsh Posté le 21-02-2014 à 10:56:42    

file_put_contents
preg_replace
 
Mais ça ne résoudra pas ton problème, dans ton rtf tu ne pourras apparemment pas mettre de l'arabe pur, il faudra les caractères encodé en UTF-8 !


---------------
D3
Reply

Marsh Posté le 24-02-2014 à 10:17:41    

merci pour votre réponse.
je suppose que les caractères sont déjà encodés en UTF-8.
 
l'instruction ci-dessous m'affiche correctement l'arabe

Code :
  1. echo($option);


 
le problème surgit lors de l’écriture du fichier (probablement fwrite ou str_replace).
y'a t'il un traitement particulier pour mon fichier RTF source (contenant de l'arabe et du français) ?

Reply

Marsh Posté le 24-02-2014 à 10:22:42    

Cf. la 6eme réponse, celle de CZH...
 
...on tourne un peu en rond non ?


---------------
D3
Reply

Sujets relatifs:

Leave a Replay

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