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

ジェネレーターにある種のステートマシンを組み込む必要があります。

次のように考えることができます。

ステップ 1: レンダリングする要素を選択します: テキストノード、段落、リスト ノード。

テキストノードを選択すると、テキストがランダムに生成され、ステップ 1 に戻ります。

エミットする段落を選択して<p>テキストを生成したら、エミット</p>してステップ 1 に戻ります。

リスト ノードの場合、リスト要素しか作成できないため<li>、ランダムな数の要素を選択し、ステップ 1 と同じルールでそれらを埋めます。

--

ネストを許可することもできます。にとを<li>追加できます。<strong><em><p>

あなたは私が推測するようにそれをクレイジーにすることができます:)

良い結果を得るには、係数を少し調整します。ランダムではあるが予測可能な出力を生成するジェネレーターを作成してみてください。全長を制御するのは良いことかもしれません。

于 2013-08-14T10:05:03.613 に答える