私は大規模なグーグルを行ってきましたが、それを理解できないようです。うまくいけば、あなたは私を助けることができます.
メッセージボードをプログラミングしています。システムは返信から HTML を除外し、代わりに標準の BBcode を使用するようメンバーに強制します。基本的な BBcode はすべてスムーズに実行されていますが、テーブル コードで問題が発生しました。
BBコード
これは私のメッセージ ボードの BBcode を制御するスクリプトです。それは非常に単純で簡単です。[table] [tr] と [td] だけが気になりますが、[b] を含めたのは、この関数が私が扱っている 3 つのコードだけではないことを理解できるようにするためです。
function BBcode($original_string) {
$find = array(
'/\[b\](.*?)\[\/b\]/is',
'/\[table\](.*?)\[\/table\]/is',
'/\[tr\](.*?)\[\/tr\]/is',
'/\[td\](.*?)\[\/td\]/is'
);
$replace = array(
'<b>$1</b>',
'<table border="1" cellpadding="5">$1</table>',
'<tr>$1</tr>',
'<td>$1</td>
);
$new_string = preg_replace ($find, $replace, $original_string);
return $new_string;
}
したがって、メンバーがメッセージ ボードでの応答にテーブル BBcode コードを使用したい場合は、おそらく次のように入力します。
[table]
[tr]
[td]Cell 1[/td]
[td]Cell 2[/td]
[td]Cell 3[/td]
[/tr]
[tr]
[td]x[/td]
[td]y[/td]
[td]z[/td]
[/tr]
[/table]
これは素晴らしいです!これは計画どおりに機能します。
問題
ただし、大きな欠陥が 1 つあります。メンバーが上記で提供した BBcode を使用してテーブルを送信すると、nl2br によって無駄なスペースが大量に追加されます。ここで私が何を意味するかを見ることができます:
(TRを追加するたびにどれだけ悪化するか想像してみてください)
ただし、ユーザーが次のようにコメントを投稿した場合:
[table] [tr] [td]Cell 1[/td] [td]Cell 2[/td] [td]Cell 3[/td] [/tr] [tr] [td]x[/td] [td]y[/td] [td]z[/td] [/tr] [/table]
投稿されたコメントは問題ないようです。
私がすでに試したこと
これらのコメントで nl2br を使用しているため、これが起こっていることがわかりました。現在、BBcode 関数が実行される前に BR タグを追加します。BBcode の後に nl2br を移動しようとしましたが、うまくいきませんでした。
次に、BBcode 関数に戻り、配列内で str_replace を実行しようとしました。
function BBcode($original_string) {
$find = array(
'/\[b\](.*?)\[\/b\]/is',
'/\[table\](.*?)\[\/table\]/is',
'/\[tr\](.*?)\[\/tr\]/is',
'/\[td\](.*?)\[\/td\]/is'
);
$replace = array(
'<b>$1</b>',
'<table border="1" cellpadding="5">' .print str_replace("<br />", "", "$1"). '</table>',
'<tr>$1</tr>',
'<td>$1</td>
);
$new_string = preg_replace ($find, $replace, $original_string);
return $new_string;
}
また、次のような無数の方法でその行を書き込もうとしました。
'<table border="1" cellpadding="5">' .str_replace("<br />", "", "$1"). '</table>',
'<table border="1" cellpadding="5">' .str_replace("<br />", "", "$1"). '$1</table>',
'<table border="1" cellpadding="5">' .str_replace("<br />", "", "$1"). '$1</table>',
'<table border="1" cellpadding="5">' . $thing = str_replace("<br />", "", "$1"); . '$thing</table>',
'<table border="1" cellpadding="5">' . $thing = str_replace("<br />", "", "$1") . '$thing</table>',
'<table border="1" cellpadding="5">' . print str_replace("<br />", "", $1); . '</table>',
etc
基本的に、私がやりたいことは、[table] コードにあるすべての BR タグを置き換えることです。どうすればいいですか?私は何を間違っていますか?アプローチを変えるべきですか?
この質問が他の場所で回答されている場合は、事前にお詫び申し上げます。他のフォーラムで同じ問題を抱えている人を少なくとも 3 人見かけましたが、OP はすべて同じ場所にリンクされていました。現在、解決策のスレッドは期限切れのリンクで提供されています。しかし、私が何かを逃した場合は、リンクしてください!
ご不明な点がございましたら、お気軽にお問い合わせください。