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

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

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

以下是word模板中的行:

用户名:${Name}

以下是替换该值的PHP行:

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

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

以下是解压缩word文件后在document.xml中生成的代码行:

<w:r&gt&书信电报;w:rPr&gt&书信电报;w:b/&gt&书信电报;w:bCs/&gt&书信电报;w:lang w:val=“en-US”w:bidi=“ar-EG”/&gt&lt/w:rPr&gt&书信电报;w:t>用户名:&lt/w:t&gt&lt/w:r&gt&书信电报;w:r&gt&书信电报;w:rPr&gt&书信电报;w:lang w:val=“en-US”w:bidi=“ar-EG”/&gt&lt/w:rPr&gt&书信电报;w:t xml:space=“preserve”>عموهشام&lt/w:t&gt&书信电报;w:tab/&gt&lt/w:r>

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

如何使其在Microsoft Word中正确显示(RTL)

您刚开始做了错误的操作,更正PHPword以使用UTF-8字符串。
根据这一点,修复PHPword有两种方法,我尝试了两种方法。正确的答案是:

Shared/String.php的第150行:

替换

公共静态函数IsUTF8($value=''){
返回utf8_编码(utf8_解码($value))==$value;
}

公共静态函数IsUTF8($value=''){
返回mb_校验_编码($value,“UTF-8”);
}

那么,如果你这样做了

$grep-rn“utf8\u编码”。

在项目根目录中,您将找到使用utf8\u encode的所有行。你会看到像这样的线条

$linkSrc=utf8\u编码($linkSrc)//$linkSrc=$linkSrc;
$givenText=utf8\u编码($text)//$givenText=$text;

只需删除注释中所示的utf8\u编码即可

发表评论