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

标签 php encoding utf-8 arabic phpword

我正在尝试使用 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/

相关文章:

python - 获取 POST 数据并返回 res.end() - 编码问题

php - 为什么 DOM 会改变编码?

php - 使用 WordPress 在 Web 服务器上运行 C++ 应用程序

php - 连接删除mysql php中的未知表多重删除

java - Tomcat/Linux 上的 UTF-8 和 Servlet

ruby - 如何在 routes.rb 中捕获参数错误

r - 如何从R打印中文字母?

php - Doctrine2 自动生成类中的自定义函数

php - 我如何在wordpress页面模板中隐藏iframe的元素

mysql - 在 Ruby 1.8.7 中插入 MySQL 数据库时,Unicode 格式丢失