Вставьте текст RTL правильно в шаблон PHPWord

Я использую шаблонный процессор PHPWord для вставки текста в шаблон.

Слово шаблон отформатировано LTR, так как все надписи на английском языке.

Вот строка в шаблоне слова:

User Name: ${name}

Вот строка PHP, которая заменяет значение:

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

Предложение двунаправленное. Ярлык английский (LTR), а имя пользователя всегда арабское (RTL).

Вот сгенерированная строка кода в document.xml после распаковки файла слова:

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

Замененный текст отображается правильно RTL в LibreOffice, но в Microsoft Word отображается LTR (в обратном порядке).

Что я могу сделать, чтобы он правильно отображался (RTL) в Microsoft Word?

12

Решение

Вы просто сделали неправильное действие, исправляя PHPword для работы со строками UTF-8.
в соответствии с этот Есть два способа исправить PHPword, и я попробовал оба. правильный это:

На линии 150, из Shared/String.php:

замещать

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

С

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

Тогда, если вы делаете

$ grep -rn "utf8_encode" .

В корне проекта вы найдете все строки, где utf8_encode используется. Вы увидите строки, как

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

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

Вы можете просто удалить utf8_encode как показано в комментариях.

0

Другие решения

Других решений пока нет …