0

我正在分离我存储在数据库表中的内容,并将其显示在带有 HTML5 的 TinyMCE (javascript) 中。每行中的内容当前按降序排列,其中显示的每个日期按最旧到最新排列。它们分别被两个<br/>html标签。我决定将 DOMXPath 与 DOMDocument 一起用于 PHP。这样,由于 TinyMCE 不建议使用任何根块/标签,并且我选择了这条路线,因为我需要将数据从最新到最旧的顺序向后排列,以便将其附加并显示在 TinyMCE 中。我将使用此代码两次,一次是向后排列数据以查看和附加新数据,另一次是当我将数据保存回表格行时。这样,用户不必一直滚动到文本区域的底部即可将新数据附加到数据库中。

我已经找到了一些$xpath->query()可以将文本彼此分开的代码。但我还需要查看描述和设置每个文本样式的 HTML 代码。

我曾尝试使用 XML“部分”以使内容更容易,但根据手册,不建议对 TinyMCE 使用强制根块,因为它可能会对 TinyMCE 的使用产生负面和严重的影响。它还要求用户必须使用 Shift+Enter 才能创建新部分。相反,这样做只需要用户记住在每次输入新条目时放置 2 个换行符。我也想依赖只使用 HTML5 代码。

$sample-data = <<<EOT
09/11/2017
<p><span style="font-color: #FF0000";>Test1</span></p>
<br />
<br />
10/27/2017
<p>Test2</p>
<br /> 
<br />
02/05/2018
Test3
EOT;

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
libxml_use_internal_errors(true);
$dom->loadHTML($sample-data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);    

$xpath = new DOMXPath($dom);
$xpath->query('//br[
   following-sibling::node()[self::*|self::text()[normalize-space()]
   ][1][self::br]
 ]/following-sibling::*/preceding-sibling::text()');

foreach ($obj as $text) {
  //echo $dom->saveXML($text);
  echo $text->textContent . "";
}

不幸的是,这段代码产生了两倍的数据量,每个兄弟似乎都创建了一个换行符 <"\r\n..."> 我需要的是这段代码来生成文本,以及描述和使用样式的 html 代码数据的参数。

我已经采用了来自这个 url xpath-to-get-data-before-2-br-tags 的大部分查询

但我还需要查看 HTML 代码。我选择使用以下常量。这样我的代码/结果就不会附加额外的 html 标签。

$dom->loadHTML($sample-data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

我也知道,为了生成我需要使用的任何 HTML 代码,我$dom->saveXML($text);尝试了多次尝试将 node() 和 last() 放在不同的位置,但我无法生成我想要的结果。

4

0 回答 0