在 PHPWord 模板中正确插入 RTL 文本
Insert RTL text correctly in PHPWord template
我正在使用 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 的方法,我都试过了。正确的是这个:
第 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
,如评论中所示。
我正在使用 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 的方法,我都试过了。正确的是这个:
第 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
,如评论中所示。