使用Dompdf转换PHP/HTML表单为PDF时出现语法错误求助
错误原因与修复方案
错误根源
你遇到的语法错误来自两个核心问题:
- 单引号字符串语法冲突:传给
loadHtml()的单引号字符串里,$_POST['servproname']中的单引号会提前闭合外层字符串,导致PHP解析逻辑混乱。 - PHP代码无法嵌入字符串执行:你把
for循环直接写在HTML字符串中,PHP不会执行这段循环,只会把它当作普通文本输出,同时还引发语法错误。
修复后的代码
<?php namespace Dompdf; require_once 'dompdf/autoload.inc.php'; if(isset($_POST['submit'])) { $dompdf = new Dompdf(); // 初始化基础HTML结构 $html = '<html> <table>'; // 单独处理循环,逐行拼接表格内容 if(isset($_POST['servproname']) && is_array($_POST['servproname'])){ $itemCount = count($_POST['servproname']); for ($i=0; $i < $itemCount; $i++) { $html .= '<tr> <td style=\'text-align:left; border:1px solid #cccccc;\'>' . $_POST['servproname'][$i] . '</td> <td style=\'text-align:left; border:1px solid #cccccc;\'>' . $_POST['docname'][$i] . '</td> <td style=\'text-align:center; border:1px solid #cccccc;\'>' . $_POST['price1'][$i] . '</td> <td style=\'text-align:center; border:1px solid #cccccc;\'>' . $_POST['qty'][$i] . '</td> <td style=\'text-align:center; border:1px solid #cccccc;\'>' . $_POST['tot4'][$i] . '</td> </tr>'; } } // 闭合HTML标签 $html .= '</table></html>'; // 加载拼接完成的HTML内容 $dompdf->loadHtml($html); $dompdf->setPaper('A4', 'landscape'); $dompdf->render(); $dompdf->stream("",array("Attachment" => false)); exit(0); } ?>
关键修改说明
- 将HTML内容拆分为变量拼接,单独执行PHP循环,彻底避免代码嵌入字符串引发的语法问题。
- 增加了数组存在性和类型判断,防止
count()函数在非数组参数上抛出错误。 - 把样式中的双引号替换为单引号,避免和外层字符串的引号冲突,也可以用
\"转义双引号替代。
内容的提问来源于stack exchange,提问作者Moon Ahmed
相关产品推荐
相关产品推荐

