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

标签 php right-to-left phpword bidi

我正在使用 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)?

最佳答案

您只是在一开始就错误地纠正了 PHPword 以使用 UTF-8 字符串。
根据 this有两种修复 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

关于php - 在 PHPWord 模板中正确插入 RTL 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520837/

相关文章:

javascript - 在 PHP 中动态地将图像添加到 JQuery slider

php - mysql_query返回通知 "Trying to get property of non-object"

css - webkit line-clamp(多线省略号)不适用于方向 rtl

php - 使用 PHPWord 替换 Word 文档中链接中的占位符

php - 在 PHPWord 中,左右对齐单词

php - 将日期传递给 where 子句时出错

php - 使 AJAX 回调在迭代器中工作

java - 如何将文本从右到左插入到 JTextField 中

html - dir ="rtl"IE7 输入字段改变焦点位置

php - CodeIgniter PHPWord 作为第三方使用