【问题标题】:MPDF not rendering html tagsMPDF 不呈现 html 标签
【发布时间】:2021-01-06 19:05:06
【问题描述】:

我正在使用我使用 composer 安装的 MPDF。我有一些内容存储在 MySQL 数据库中,其中包括 HTML 标签和文本。我希望用户能够创建和编辑自己的信件。 当我去打印 pdf 时,我得到一个 PDF 页面,页面上显示了 HTML 标记。奇怪的是;如果我获取该输出并将其复制并传递到 PHP 页面中的 WriteHTML() 函数中,该页面将以正确的文本和格式呈现。 HTML标记似乎不是问题,而是Mpdf如何呈现HTML。

这是发送到 $WriteHTML 之前的 $headder 输出:

<h1 style="text-align: center;">Baddeck Academy Scholarships</h1> <h6     
style="text-align: center; line-height: 1;"><span style="color:         
#e67e23;">320 Shore Rd.</span></h6> <h6 style="text-align: center; 
line-height: 1;"><span style="color: #e67e23;">Baddeck, NS</span></h6> 
<h6 style="text-align: center; line-height: 1;"><span style="color: 
#e67e23;">B0E 1B0</span></h6>

这是导出的页面内容以及我正在使用的代码。

这里是 Mpdf php 页面:

<?php

include('connect.php');
$id = (filter_var($_GET['id'], FILTER_SANITIZE_STRING));

$sql = "SELECT * FROM `money_letters_contents` WHERE `id` = '$id' LIMIT 0,1000";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
 $headder = ($row['headder']);
$body = ($row['body']);
      $footer = ($row['footer']);
  }
} else {

}

$html = $headder;

//==============================================================
//==============================================================
//==============================================================

require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new mPDF();

$mpdf->WriteHTML("$headder");
$mpdf->WriteHTML("$body");
$mpdf->Output();
exit;

【问题讨论】:

  • 能否在运行-&gt;WriteHTML 之前告诉我们$body 的值是多少?
  • 我将把它放在上面编辑过的答案中。谢谢
  • 您的数据库内容是否已经被 htmlspecialchars 转义了?
  • 我使用 htmlentities 将来自文本区域的值存储在 tinymce 中,然后我可以使用 mpdf 从数据库中读取它们。我可以尝试在没有 htmlentities 的情况下存储它们,但我认为这不是存储数据的好方法。

标签: php mpdf


【解决方案1】:

好的,在寻找这个答案 3 天后,在@Finew 的帮助下,我查看了从服务器获取数据的方式,并创建了另一个步骤,将 mysqli $row 存储为另一个变量,然后我对该变量进行了 htmlspecialchars_decode。这似乎有效,现在产生了正确的结果。

因此,对于任何想要查看我在这里所做的工作的人来说都是工作代码。

?php



include('connect.php');
$id = (filter_var($_GET['id'], FILTER_SANITIZE_STRING));

$sql = "SELECT * FROM `money_letters_contents` WHERE `id` = '$id' LIMIT     0,1000";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
 $headder = ($row['headder']);
$body = ($row['body']);
      $footer = ($row['footer']);
  }
} else {

}

$headder1 = htmlspecialchars_decode($headder);
$body1 = htmlspecialchars_decode($body);


$html = $headder;

//==============================================================
//==============================================================
//==============================================================

require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new mPDF();

$mpdf->WriteHTML("$headder1");
$mpdf->WriteHTML("$body1");
$mpdf->Output();
exit;

感谢所有关注此问题的人。

【讨论】:

  • 当然,如果你无论如何都可以影响这一点,正确的方法是将原始数据存储在数据库中并清理输出。
  • 另外,请尽快将您的答案标记为已接受。
猜你喜欢
  • 2014-10-14
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多