【问题标题】:php tcpdf writeHTML() fail when using <sometext>使用 <sometext> 时 php tcpdf writeHTML() 失败
【发布时间】:2019-08-11 17:16:30
【问题描述】:

我正在使用 tcpdf 将一些数据导出为 pdf,它几乎可以正常工作。

如果我的内容中包含 &lt;some text&gt;(并且某些文本不是 html 标记),则 pdf 会丢失样式并损坏。

我该如何解决这个问题?

【问题讨论】:

  • 那么像&lt;p&gt;This is &lt;some text&gt;&lt;/p&gt; 这样的东西会失败吗?但&lt;p&gt;This is some text&lt;/p&gt; 不会?
  • 是的。似乎代码尝试评估 就好像它是一个 html 标记并且失败了

标签: php tcpdf


【解决方案1】:

TCPD 对输入 HTML 非常挑剔。它支持有限的 HTML 子集,并且所有其他标签都被剥离。上次我检查时,TCPDF 使用strip_tags 删除不受支持的标签(以及 任何看起来像标签的东西)。因此,在某些情况下,根据您输入的具体情况,它很有可能会删除的不仅仅是看起来像标签的文本。

我们来看这个例子:

<p>This is <some text></p>

在浏览器中&lt;some text&gt; 将被视为具有空“文本”属性的标签,并且对用户不可见。 TCPDF 确实基本上以同样的方式对待它。我为此寻找了一个可靠的自动修复程序,但大多数 HTML 解析器都以同样的方式处理它。例如,Tidy extension 直接将其删除。

如果您需要文本中的大于和小于符号,则需要将它们编码为 HTML 实体。例如,它需要像这样传递给 TCPDF:

<p>This is &lt;some text&gt;</p>

一种可能的解决方案是在将其添加到 HTML 之前,通过htmlspecialchars 运行预期的纯文本(即不包含任何 HTML 的源)。这会将这些特殊的 HTML 字符编码为实体。

例如,用户的表单输入到字段中:

$someusertext = $_POST['somefield'];
$html = '<p>'.htmlspecialchars($someusertext, ENT_COMPAT, 'UTF-8').'</p>';

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 2011-07-05
    • 2011-12-15
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多