0

我已经为我正在工作的项目编写了一个内容生成器工具,以帮助我将虚假内容批量导入数据库的文本字段。它只是帮助使网站看起来很拥挤。

我正在使用一个名为 lorem-php-sum 的外部类来实际生成我要插入的字符串。它实际上非常简单,它只是插入包含在标签中的文本段落<p>(每次都是随机数),然后我将这些字符串插入到我选择的表中的一个大循环中。

现在的问题是,我想稍微推进随机生成的内容,并添加一些 html 列表标签、水平线标签和其他内容。我希望我的新 html 元素随机放置在从该段落生成器类返回的段落中。

问题是,虽然我可以在某个随机点轻松地将列表标签插入到我的大段落字符串中,但我担心有时它可能会以破坏 html 的方式在现有标记中插入我的新 html 标签。

有没有人有将带有一些规则的html插入另一个字符串的技巧?我想也许 php domDocument 类可以帮助解决这个问题,但现在不确定?

4

3 回答 3

0

所以我设法使用其他代码示例并使用 domDocument 解决了这个问题。我最终制作了一个函数,该函数通过段落标签分解字符串并将其作为包含每个段落作为单独项目的数组返回。

function splitTextByPara($string,$split_on="p"){
// Add alternative tags to split on with syntax: |//ul|//br 

$dom = new DOMDocument();
$dom->loadHTML($string);
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//".$split_on);
$result = array();
foreach ($entries as $entry) {
    $result[] = $entry->ownerDocument->saveHTML( $entry );
}

// re-encode to utf8
$result = array_map("utf8_decode", $result);

return $result;
}
于 2013-08-14T21:13:57.920 回答
0

您需要在生成器中加入某种状态机。

你可以这样想:

Step1:选择要渲染的元素:文本节点、段落、列表节点。

当您选择一个文本节点时,您会随机生成一些文本并返回到第 1 步。

当您选择一个段落时,您发出<p>并生成一些文本,发出</p>并返回到第 1 步。

对于列表节点,您只能制作列表元素<li>,因此请选择随机数量的元素并使用与步骤 1 相同的规则填充它们。

--

您也可以允许嵌套。在<li>你可以添加<strong><em>,类似的<p>

我猜你可以随心所欲地让它变得疯狂:)

稍微调整一下系数以获得良好的结果。尝试制作一个生成随机但可预测的输出的生成器,总长度可能是控制的好东西。

于 2013-08-14T10:05:03.613 回答
0

您可以分层循环遍历多维数组。没有没有行的单元格,没有没有表格的行,因此没有没有ul的li。

$tags = array("<table>%s</table>\n" , 
                array ("  <tr>%s</tr>\n" , 
                  array("    <td>%s</td>\n)),
              "<ul>%s</ul>\n",
                arrray ("  <li>%s</li>\n") //continue with more tags
        ); 
$tags_simple = array("%s", "<strong>%s</strong>", 
                     "<i>%s</i>", "<p>%s</p>\n", "%s</ br>\n"
                    ); //etc, "%s" for a none tag, add more if you like

从 $tags 中选择一个随机数,将它们多循环,sprintf 随机句子并向它们添加随机简单标签。这是一个独立的可能性。

于 2013-08-14T11:02:04.517 回答