我有一个用户填写问卷的表单,当他们提交特殊字符时创建的文档已损坏
如何解决此问题
我的代码
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;'时才会发生这种情况正在提交
这方面的任何线索 谢谢
答案 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('&', '&', $text);
return $text;
}