gpt4 book ai didi

PHPWord:创建从右到左的阿拉伯语 word 文档

转载 作者:可可西里 更新时间:2023-10-31 22:13:12 26 4
gpt4 key购买 nike

我正在尝试使用 PHPWord创建一个包含从 MySQL 数据库中提取的动态数据的 word 文档。数据库有 MySQL 字符集:UTF-8 Unicode (utf8)MySQL 连接排序规则:utf8_unicode_ci 表字段也是如此。

数据在 HTML 中存储和预览都很好,但是当使用阿拉伯变量创建文档时,Word 中的输出看起来像 Ø£ØÙد Ùبار٠اÙÙرÙ.

$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('templates/.../wtvr.docx');
$document->setValue('name', $name);
$document->setValue('overall_percent_100', $overall_percent_100);
$document->save('Individual Report - ' . $name . '.docx');

有办法解决吗?

最佳答案

嗯,是的。但不幸的是你必须修改库。该库的作者使用 utf8_encode/utf8_decode 显然根本不了解它们的作用。

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

为什么 utf8_encode/utf8_decode 错误?首先,因为那不是他们所做的。他们执行 from_iso88591_to_utf8from_utf8_to_iso88591。其次,几乎从未使用过 ISO-8859-1,通常当有人声称他们使用它时,他们实际上使用的是 Windows-1252。 ISO-8859-1 是一个非常小的字符集,甚至无法编码 ,更不用说阿拉伯字母了。

您可以通过以下方式对图书馆进行快速审查:

$ grep -rn "utf8_\(en\|de\)code" .

如果找到匹配项,您应该继续寻找其他库。这些函数每次都只是做错事,即使有人需要一些边缘情况来使用这些函数,最好在您真正需要 ISO-8859-1 时明确说明它,因为您通常不会这样做。

关于PHPWord:创建从右到左的阿拉伯语 word 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com