2017-02-28 2 views
10

Ich benutze PHPWord Vorlagenprozessor, um etwas Text in eine Vorlage einzufügen.Einfügen RTL-Text korrekt in PHPWord Vorlage

Die Wortvorlage ist LTR formatiert, da alle Beschriftungen Englisch sind. Hier

ist die Zeile in der Word-Vorlage:

User Name: ${name} 

Hier ist die PHP-Linie, die den Wert ersetzt:

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

Der Satz ist bidirektional. Das Label ist Englisch (LTR) und der Benutzername ist immer Arabisch (RTL). Hier

ist der erzeugte Code-Zeile in document.xml, nach der Word-Datei entpacken:

<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> 

Der ersetzte Text korrekt RTL in Libreoffice erscheint, erscheint aber LTR (umgekehrt) in Microsoft Word.

Was kann ich tun, damit es in Microsoft Word korrekt angezeigt wird (RTL)?

+0

Ich denke, es sollte eine '' nach der zweiten '', die nicht vorhanden ist sein. – revo

+0

http://stackoverflow.com/questions/14491325/fix-a-bi-lingual-wrong-right-to-left-text könnte möglicherweise helfen – MifReal

+0

ich nehme an, dass Sie dies bereits getan haben: http://stackoverflow.com/questions/13967229/phpword-creating-a-arabic-rechts-nach-links-Word-Dokument –

Antwort

0

Sie haben gerade die falsche Aktion an erster Stelle korrigiert das PHPword, um mit UTF-8-Strings zu arbeiten.
nach this gibt es zwei Möglichkeiten, PHPword zu beheben, und ich habe beide versucht. dies ist die richtige:

auf der Leitung 150, von Shared/String.php:

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

Mit

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

Dann, wenn Sie

$ grep -rn "utf8_encode" . 

On tun der Profi Sie werden alle Zeilen finden, in denen utf8_encode verwendet wird. Sie werden sehen, wie Linien

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

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

Sie können einfach die utf8_encode entfernen, wie in den Kommentaren angezeigt.