在PHPForm中提交特殊特许时,文档文件已损坏

在PHPForm中提交特殊特许时,文档文件已损坏,php,phpword,Php,Phpword,我有一个表单,用户填写问卷,当他们提交特殊字符时,创建的文档已损坏 我怎样才能解决这个问题 我的代码 require_once 'src/PhpWord/Autoloader.php'; \PhpOffice\PhpWord\Autoloader::register(); if(isset($_POST['submit_docs'])){ $companyname= $_POST['companyname'];

我有一个表单,用户填写问卷,当他们提交特殊字符时,创建的文档已损坏

我怎样才能解决这个问题

我的代码

require_once 'src/PhpWord/Autoloader.php';
            \PhpOffice\PhpWord\Autoloader::register();

            if(isset($_POST['submit_docs'])){
            $companyname= $_POST['companyname'];
                        // Creating the new document...
            $phpWord = new \PhpOffice\PhpWord\PhpWord();
                        // Adding an empty Section to the document...
            $section = $phpWord->addSection();

                        $html .= '<ul><li>Company Name and Address : '.$_POST["companyname"].' </li></ul>';
                                    \PhpOffice\PhpWord\Shared\Html::addHtml($section, $html);
            $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
            $objWriter->save('questionnaire/DMKSA_Questionnaire_'.$arr[0].'.docx');
只有在使用addHtml()函数时需要确保内容文本没有html特殊字符时,才会出现这种情况,例如“”。使用htmlspecialchars()php函数基本上很容易保证这一点,但不幸的是,这导致了下一个问题(至少在php 0.12.0中是这样),即添加包含符号和字符(&)的内容时存在问题,因此需要进行一些额外的调整以使符号正常工作。您可以尝试以下方法来解析所有用户输入值:

function fixTextForPhpWord($string)
{
        $text = htmlspecialchars($string);
        $text = str_replace('&', '&amp;', $text);
        return $text;
}
因此,在你的情况下:

$html .= '<ul><li>Company Name and Address : ' . fixTextForPhpWord($_POST["companyname"]) . ' </li></ul>'
$html.='
  • 公司名称和地址:'。fixTextForPhpWord($_POST[“companyname”])。'
'
$html .= '<ul><li>Company Name and Address : ' . fixTextForPhpWord($_POST["companyname"]) . ' </li></ul>'