在PHPForm

时间:2015-11-04 07:58:48

标签: php phpword

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

如何解决此问题

我的代码

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');

错误

Warning: DOMDocument::loadXML(): StartTag: invalid element name in Entity, line: 1 in /home/xxxx/public_html/test/src/PhpWord/Shared/Html.php

仅当特殊字符如'&lt;'时才会发生这种情况正在提交

这方面的任何线索 谢谢

1 个答案:

答案 0 :(得分:0)

使用addHtml()函数时,您需要确保内容文本没有html特殊字符。这通过使用htmlspecialchars()php函数基本上很容易保证 - 但遗憾的是这导致了下一个问题(至少它在php 0.12.0中对我有用),即添加包含&符号的内容存在问题(&amp; ;)所以你需要做一些额外的调整以使&符号工作。您可以尝试这样的方法来解析所有用户输入值:

var result = (from a in table1
              join b in table2 on a.code equals b.vcode
              select a.col1).Distinct();

所以在你的情况下:

function fixTextForPhpWord($string)
{
        $text = htmlspecialchars($string);
        $text = str_replace('&', '&amp;', $text);
        return $text;
}