我正在使用PHPWord模板处理器在模板中插入一些文本。
单词模板的格式为LTR,因为所有标签都是英文。
以下是单词模板中的行:
User Name: ${name}
以下是替换值的PHP行:
$template->setValue('name', $user->name);
这句话是双向的。标签为英文(LTR),用户名始终为阿拉伯语(RTL)。
解压缩word文件后,这是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>
替换的文本在LibreOffice中正确显示RTL,但在Microsoft Word中显示为LTR(反向)。
如何才能使其在Microsoft Word中正确显示(RTL)?
答案 0 :(得分:0)
你刚刚做了错误的操作,纠正了PHPword以使用UTF-8字符串 根据{{3}},有两种方法来修复PHPword,我尝试了两种方法。正确的是:
在Shared/String.php
的第150行:
替换
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
即可。