AAAA
<br />
<br />
・
・←100行ほど「<br />のループ」
・
<br />
BBBBBB
<br />
<br />
・
・
というような悪意的な書き込みがあったとします。
(たまに掲示板などで見かける幼稚な荒らし)
こういう書き込みは見た目に不快なので、
PHPでの書き込み処理の段階で<br />を消したり、<br />の数を書き換えるのが正しいやり方と思うのですが、条件を考えても、正規表現を考えても、これといった上手い対処が思い浮かばずに困っています。
CSSで
br{
line-height:0;
}
とすれば解決なんでは?と思い、試してみました。
IE6、IE7、Firefox、Operaで確認したところ
<br />がいくつ繰り返されようと改行一回と同じように表示ました。
しかし、
Safari、Chromeでは改行の数だけ高さがついてしまいます。
これについてなにか具体的な解決案がありましたらお知恵を貸してください。
見た目だけでもCSSで解決できればと思っています。
XHTMLの文法としては、なんの解決にもなっていませんが・・。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
別解ですが、JavaScriptで対応する方法もあります。
<head>
<script type='text/javascript'>
function init(){
var br = document.getElementsByTagName('br');
while(br[0].nextSibling.tagName == 'BR'){
br[0].parentNode.removeChild(br[0]);
}
}
if(typeof window.addEventListener == 'function'){
window.addEventListener('load', init, false);
} else if(typeof window.attachEvent == 'object'){
window.attachEvent('onload', init);
}
</script>
</head>
<body>
<p>test<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />test</p>
</body>
ところで、#1の方の提示されたCSSですが、上記HTMLに
<style type='text/css'>
/* モダンブラウザ用 */
br+br { display:none; }
/* IE6用 */
br { line-height: 0px; }
</style>
を追加してGoogle Chromeでも改行1つに置換されることを確認しました。
Safariではダメだったということでしょうか?
# 個人的な見解ですが、空行には段落を分ける意味があると思うので空行1つに置換させる方が見やすい、と思います。
JavaScriptのアイディアありがとうございます!
<p>test<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />test</p>
の場合なら上手くいきますね。
br+br { display:none; }がダメというのは、
A<br /><br />・・<br />B<br /><br />・・<br />C<br /><br />・・<br />D<br />E
などと書き込みがあった場合に、
最初の<br />以外(B以降の<br />)は非表示になり
1
2 3 4 5
という具合になってしまうということです。
CSSでの解決はやっぱり無理なんですかね・・。
># 個人的な見解ですが、空行には段落を分ける意味があると・・・
そうですね。いっそ内容を"<br />"でexplodeし、配列を<p>内とかに入れて、「空白なら表示しない。」などと
置換したほうがよさそうですね。
No.2
- 回答日時:
htmlspecianchars()関数はでは望み通りに結果になりませんか?
(見た目が不快との事なので違うかもしれませんが)
実際に改行されてしまうのが問題の場合、
htmlspecialchars()関数でHTMLタグはそのまま表示されるようになります
ただ普通書き込みのの改行文字もnl2br()関数などで機能させられますが、それも意味ないですよね・・・。
ともあれ、HTMLタグを取り除くならstrip_tags()関数等もありますので試してみてください
(論点が違ったらごめんなさい)
参考URL:http://jp.php.net/htmlspecialchars,http://jp.php …
回答ありがとうございます。
PHPの処理はいろいろパターンを予想して処理を考えて・・
<br />の処理くらいCSSでできたら楽なのにな・・
と思って質問してみました。
なので論点はあってないようなものです。
ちなみに・・nl2br()って関数は知らなかった・・。
No.1
- 回答日時:
br{line-height:0;}
br+br{display:none;}
IE6はbr+br{}という書き方に対応していないので、併用が良いと思います。
(個人的にIE6対策としてline-height:0というのは勉強になった。。。m(_ _)m)
> PHPでの書き込み処理の段階で<br />を消したり、<br />の数を書き換えるのが正しいやり方と思うのですが、
こんな感じでどうでしょうか。
$message=preg_replace(array("/(\\r\\n)+/", "/(\\r)+/", "/(\\n)+/"), "<br />", $message);
なるほど。br+brか!
良くリストなんかで使うアレですね。
でも、試してみたところ・・ダメっぽいです。
PHPの条件の提案のほう、ありがとうございます。
これなら上手くできますね。正規表現は奥深い・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- HTML・CSS HPに文章で改行はすべてBRタグとかで改行しなきゃだめなのですか?改行が活きたまま書く方法ないの? 1 2022/12/03 21:00
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- MySQL MySQLに登録した内容を更新する時の、textareaの使い方 1 2022/07/11 18:20
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
H1タグに改行の<br>を使う
-
テキストエリア内の改行禁止
-
改行コードの削除
-
テーブル内の文字列を改行させたい
-
テキストエリア内の改行もその...
-
<TD><input type="text"></TD>...
-
<br />タグの、brの後の半角ス...
-
改行を認識できる&ハイパーリ...
-
HTMLで改行するとスペースが開く
-
<h1></h1>のタイトルの行に画像...
-
テーブルの幅を固定するとnowra...
-
preタグがプロの現場であまり使...
-
なぜか<p> </p>が挿入され...
-
\\n \\r \\t について
-
長いURLを途中で改行(折り返す...
-
HPに文章で改行はすべてBRタグ...
-
カーソルを合わせると説明を表...
-
テキストエディタで文字列を揃える
-
htmlで文字列をクリップボード...
-
XMLの改行方法とリンクの仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストエリア内の改行禁止
-
H1タグに改行の<br>を使う
-
テーブルのセルデータを自動改...
-
長いURLを途中で改行(折り返す...
-
テーブルの幅を固定するとnowra...
-
改行できる・できない入力ボッ...
-
\\n \\r \\t について
-
テーブル内の文字列を改行させたい
-
preタグがプロの現場であまり使...
-
テキストエリア内の改行もその...
-
「:」について
-
PCの画面を縮小したらサイズ...
-
htmlで文字列をクリップボード...
-
<br />タグの、brの後の半角ス...
-
<TD><input type="text"></TD>...
-
XMLの改行方法とリンクの仕方
-
html上で改行するとスペースが...
-
<br style="clear:both;">って...
-
mailtoで本文に改行を入れたい
-
文章改行で出来る半角スペース...
おすすめ情報