2017-02-28 7 views
10

PHPWordテンプレートプロセッサを使用して、テンプレートにテキストを挿入しています。PHPWordテンプレートにRTLテキストを正しく挿入してください

すべてのラベルが英語であるため、テンプレートという語はLTRでフォーマットされています。ここで

は、Wordテンプレートの行です:

$template->setValue('name', $user->name); 

文が双方向である:ここでは

User Name: ${name} 

は値を置き換えPHPラインです。ラベルは英語(LTR)で、ユーザー名は常にアラビア語(RTL)です。

<w:r><w:rPr><w:b/><w:bCs/><w:lang w:val="en-US" w:bidi="ar-EG"/></w:rPr><w:t>User Name:</w:t></w:r><w:r><w:rPr><w:lang w:val="en-US" w:bidi="ar-EG"/></w:rPr><w:t xml:space="preserve"> عمرو هشام</w:t><w:tab/></w:r> 

置き換えテキストはLibreOfficeの中で正しくRTLを表示されますが、Microsoft Wordで(逆に)LTRを表示されます。ここでは

は、ワードファイルを解凍した後、document.xml内のコードの生成行です。

Microsoft Wordで正しく表示されるようにするにはどうすればよいですか?

+0

2番目の「」の直後に「」が存在するはずです。 – revo

+0

http://stackoverflow.com/questions/14491325/fix-a-bi-lingual-wrong-right-to-left-textおそらく助けることがあります – MifReal

+0

私はこれを前に行ったと推測します:http://stackoverflow.com/questions/13967229/phpword-a-arabic-right-to-left-word-document –

答えて

0

あなたはUTF-8文字列で動作するようにPHPwordを修正した最初の場所で間違った処置をしました。
thisによると、私は両方を試してみて、PHPwordを修正する2つの方法があります。右はこれです:Shared/String.phpのライン150上

、:

あなたがオン

$ grep -rn "utf8_encode" . 

をすれば、その後

public static function IsUTF8($value = '') { 
    return mb_check_encoding($value, "UTF-8"); 
} 

public static function IsUTF8($value = '') { 
    return utf8_encode(utf8_decode($value)) === $value; 
} 

を交換してくださいプロルートには、utf8_encodeが使用されているすべての行があります。あなたは、コメントに示すように、あなたは単にutf8_encodeを削除することができます

$linkSrc = utf8_encode($linkSrc); //$linkSrc = $linkSrc; 

$givenText = utf8_encode($text); //$givenText = $text; 

ような行が表示されます。

関連する問題