在 PHPWord 模板中正确插入 RTL 文本

2022-08-30 20:09:41

我正在使用PHPWord模板处理器在模板中插入一些文本。

单词模板的格式为 LTR,因为所有标签都是英文的。

下面是单词模板中的行:

User Name: ${name}

下面是替换该值的 PHP 行:

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

这句话是双向的。标签为英语 (LTR),用户名始终为阿拉伯语 (RTL)。

以下是在解压缩单词file后,文档中.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>

替换的文本在LibreOffice中正确显示RTL,但在Microsoft Word中显示LTR(反向)。

我能做些什么来使它在Microsoft Word中正确显示(RTL)?


答案 1

您只是首先执行了错误的操作,更正了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


答案 2

推荐