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

时间:2017-02-28 14:41:53

标签: php character-encoding phpword

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

我首先想到的是编码问题,但我的脚本中没有指定任何编码。我已经为HTML页面指定了字符集,在SQL数据库中为其他项目指定了字符集(UTF8会这样做)但是有问题的实现都没有使用。

我发生的另一件事是docx在服务器上创建,并从那里下载以进行打印。可以归咎于服务器环境吗?我无法在网上找到更改docx编码的方法。

理想情况下,我喜欢文档内修复,而不是让托管公司修改设置。

这是代码:

$textrun->addText('If you wish to have a script remarked we will charge €35 for this.);

3 个答案:

答案 0 :(得分:1)

$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");

答案 1 :(得分:1)

尽管这个答案可能来得很晚,但对于仍遇到与该问题有关的困难的人来说可能有用。

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

在PHPWord文档中分配值时,如果传递了UTF-8格式的字符串,则会在文档中正确插入特殊字符,包括货币符号,带有变音符号的德语字符。

示例:

$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('template.docx');

$document->setValue('variable', utf8_decode($value));

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

编辑:在遗留系统上不使用第三个参数的情况下,使用 htmlspecialchars 函数时要小心,因为该参数的默认值因PHP版本(PHP 5.4 Compatibility)而异。

答案 2 :(得分:0)

phpword不支持像&amp ;;这样的特殊符号或者<或者>等等..为了解决它我已经用过这个:

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