0

だから私は前に投稿を始めましたが、それは閉じられました:(それ以来、[code][/code]タグ内のコンテンツを何らかの形で取得し、str_replace()その中のスマイリーBBコードテキストで実行する必要があることに気づき、少し進歩することができました。これが私がこれまでに持っているものですしかし、それは機能していません

if (preg_match_all('~[code](.*?)[\/code]~i', $row['message'], $match)){

 foreach($match[1] AS $key) {
   $find    = array(':)',':(',':P',':D',':O',';)','B)',':confused:',':mad:',':redface:',':rolleyes:',':unsure:');
   $replace = array(':)',':(',':P',':D',':O','&#59;)','B)',':confused:',':mad:',':redface:',':rolleyes:',':unsure:');
}
 $message = str_replace($find, $replace, $key);
  } else {
 $message = $row['message'];
}

メッセージの内容をまったく返さないだけです。

この行を変更すると:

$message = str_replace($find, $replace, $key);

これに:

$message = str_replace($find, $replace, $row['message']);

[code][/code]それは一種の機能ですが、タグ内のコンテンツだけではなく、メッセージ全体内のすべてのスマイリーを置き換え$keyます。...助けてください、私の脳が過負荷になっています!

この質問は異なりますが、私に非常に関連していますが、それに対する本当の答えはありませんでした。

4

1 に答える 1

0

既存の BBCode パーサー (例: NBBC ) を使用するか、少なくともその方法を確認する方が簡単だと思います。そして、彼らはそれをはるかに賢明な方法で行いました。正規表現を使用するのではなく、レクサーを使用して、それを個別のタグに分割します (以下を参照)。その後、[code] タグには何もしません。あなたがまだあなたの解決策にとどまりたいのであれば、私はそれらを配列に分割します(bbcode = explode('[code]', bbcode)そして[コード]についても同じです。2番目のリスト要素ごとに他の解析が使用されるべきではありません。前に述べたように:目的はありません車輪の再発明なので、そうしないでください。

これが彼らのソリューションの仕組みです:

[b]Hello![/b]
[code]
#/usr/bin/python
import antigravity
[/code]
Python is much more awesome.

となります。次の要素を持つ配列:

  1. [b]Hello![/b]
  2. [code]…[/code]
  3. Python is much more awesome.

そして、適用すべきフォーマットを適用します。はるかに良く、より人間的です。

長いのでコメントではありません。

于 2012-12-23T15:08:30.953 に答える