-1

複数の列にコンテンツを表示する必要がある奇妙なシーンにいます。古いバージョンの IE に css3 column-cont と jquery プラグイン columnizer を使用しています。問題は、データが外部 Web サービスによって提供されているため、データを完全に制御できないことです。ほとんどの場合、コンテンツは複数の段落タブにラップされています

Content#1

 <p><strong>Heading</strong><br>This is a content</p>
 <p><strong>Heading</strong><br>This is a content</p>

しかし、まれにデータが<p>タグでラップされず、次のようになります。

Content#2

<strong>Day 1: xyz </strong><br>
 lorem lipsum <br> <br> 
<strong>Dag 2: lorem lipsum</strong><br> 
Morgonflyg till Arequipa i södra Peru.
<br> <br> 

本当の問題はjquery columnizer、このようなコンテンツをカラム化するように求められたときに、プラグインがこのマークアップでブラウザーをハングアップさせることです。

Content#2ここで、正規表現の助けを借りて変換したいと思いますContent#1。つまり、コンテンツを適切な段落にラップします。PHP を使用していることを明確にしていただければ幸いです。

前もって感謝します!

4

2 に答える 2

1

あなたのコンテンツは安定しておらず、正規表現はこのような異なるコンテンツでは魔法を行いません. そうは言っても、他の Web サイトからデータを受信して​​いるときはいつでも、いつか別のパターンを返す可能性が高いため、ルールが適切でなくなる可能性があります。信頼できる結果を得るには、信頼できる情報源が必要です。

これは汚い文字列操作ですが、パターンが一貫していれば、必要なものが得られます。そして、信頼できるソースを使用する必要があると私は主張します.

$str = "<strong>Day 1: xyz </strong><br>
 lorem lipsum <br> <br>
<strong>Dag 2: lorem lipsum</strong><br>
Morgonflyg till Arequipa i södra Peru.
<br> <br> ";

function parse($data)
{
  if(substr($data, 0, 3) == "<p>") return $data;

  $chunks = explode("<strong>", $data);
  $out = array();

  foreach($chunks as $chunk)
  {
    $item = $chunk;

    $last_br = strpos($item, "<br> <br>");
    if($last_br > -1){ $item = substr($item, 0, $last_br); }

    $item = "<p>" . $item . "</p>";

    $out[] = $item;
  }

  return implode("\n", $out);
}

echo parse($str);
于 2013-09-26T11:28:13.027 に答える