无法在 phpword 生成的 docx 中显示欧元符号 (€)



我无法在生成的.docx中显示欧元符号(€)。我得到的只是正方形。

我的第一个想法是这是一个编码问题,但是我脚本中的任何地方都没有指定编码。我已经为HTML页面和其他项目的SQL数据库指定了charset(UTF8会这样做),但是所涉及的实现都不使用。

在我身上发生的另一件事是,DOCX在服务器上创建,并从那里下载以进行打印。服务器环境应该怪吗?我看不到在线上更改DOCX编码的任何方法。

理想情况下,我想要一个文件中的修复程序,而不是让托管公司进行设置的修补。

这是代码:

$textrun->addText('If you wish to have a script remarked we will charge €35 for this.);
$fa_euro = html_entity_decode('', 0, 'UTF-8');
$section->addText(utf8($fa_euro));

Google是您的朋友:https://github.com/phpoffice/phpword/issues/780

在脚本的顶部也设置了以下内容:

mb_internal_encoding("UTF-8");

尽管此答案可能迟到,但对于仍然遇到与此问题相关的困难的人可能有用。

一个简短而简单的解决方案将是使用PHP的 utf8_decode()函数,该函数将字符串转换为UTF-8格式(PHP文档)。

在PHPWORD文档中分配值时通过UTF-8格式字符串时,特殊字符,包括货币符号,带有UMLAUT的德语字符,将正确插入文档中。

示例:

$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('template.docx');
$document->setValue('variable', utf8_decode($value));

一种特殊情况是在某些Linux发行版中通过Nano(CLI编辑器)编辑脚本时 - 如果您对任何包含特殊字符的字符串进行了硬编码,则将在保存文件时将其转换为另一个编码。

编辑:使用 htmlspecialchars 函数时要谨慎,而遗留系统上没有第三个参数,因为参数的默认值取决于PHP版本(PHP 5.4兼容性)。

phpword不支持&或<或>等。为了解决它,我已经使用了以下内容:

$n = htmlspecialchars("your string with special chars");
$section->addText($n);

最新更新