在PHPWord模板中正确插入RTL文本
发布时间:2020-12-13 16:42:07 所属栏目:PHP教程 来源:网络整理
导读:我使用 PHPWord模板处理器在模板中插入一些文本. 所有标签都是英文,字样模板是LTR格式. 以下是单词模板中的一行: User Name: ${name} 以下是替换值的PHP行: $template-setValue('name',$user-name); 这句话是双向的.该标签是英文(LTR),用户名始终是阿拉伯
我使用
PHPWord模板处理器在模板中插入一些文本.
所有标签都是英文,字样模板是LTR格式. 以下是单词模板中的一行: User Name: ${name} 以下是替换值的PHP行: $template->setValue('name',$user->name); 这句话是双向的.该标签是英文(LTR),用户名始终是阿拉伯语(RTL). 以下是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,如注释中所示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |