diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php
index 8aee40c546..c3297eac76 100644
--- a/src/PhpWord/TemplateProcessor.php
+++ b/src/PhpWord/TemplateProcessor.php
@@ -269,7 +269,7 @@ protected static function ensureMacroCompleted($macro)
*/
protected static function ensureUtf8Encoded($subject)
{
- return $subject ? Text::toUTF8($subject) : '';
+ return ($subject !== null) ? Text::toUTF8($subject) : '';
}
/**
diff --git a/tests/PhpWordTests/TemplateProcessorTest.php b/tests/PhpWordTests/TemplateProcessorTest.php
index 49e88d1b5b..807bdda418 100644
--- a/tests/PhpWordTests/TemplateProcessorTest.php
+++ b/tests/PhpWordTests/TemplateProcessorTest.php
@@ -1630,4 +1630,101 @@ public function testShouldMakeFieldsUpdateOnOpenWithCustomMacro(): void
$templateProcessor->setUpdateFields(false);
self::assertStringContainsString('', $templateProcessor->getSettingsPart());
}
+
+ public function testEnsureUtf8Encoded(): void
+ {
+ $mainPart = '
+
+
+
+
+
+
+
+ ${stringZero}
+
+
+
+
+
+
+ ${intZero}
+
+
+
+
+
+
+ ${stringTest}
+
+
+
+
+
+
+ ${null}
+
+
+
+
+
+
+ ${floatZero}
+
+
+
+
+
+
+ ${intTen}
+
+
+
+
+
+
+ ${boolFalse}
+
+
+
+
+
+
+ ${boolTrue}
+
+
+
+
+ ';
+ $templateProcessor = new TestableTemplateProcesor($mainPart);
+
+ self::assertEquals(
+ ['stringZero', 'intZero', 'stringTest', 'null', 'floatZero', 'intTen', 'boolFalse', 'boolTrue'],
+ $templateProcessor->getVariables()
+ );
+
+ $templateProcessor->setValue('stringZero', '0');
+ self::assertStringContainsString('0', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('intZero', 0);
+ self::assertStringContainsString('0', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('stringTest', 'test');
+ self::assertStringContainsString('test', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('null', null);
+ self::assertStringContainsString('', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('floatZero', 0.00);
+ self::assertStringContainsString('0', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('intTen', 10);
+ self::assertStringContainsString('10', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('boolFalse', false);
+ self::assertStringContainsString('', $templateProcessor->getMainPart());
+
+ $templateProcessor->setValue('boolTrue', true);
+ self::assertStringContainsString('1', $templateProcessor->getMainPart());
+ }
}