我无法在生成的.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);