人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php:正規表現を使って、HTMLタグの中以外の改行コードをBRに置き換える処理を教えてください。

今、正規表現を使って、HTML文章中の改行コードを、BRに置き換える処理をPHPにて実装しています。

が、この方法がわかりません。

最初は単純に改行コードをBRタグに置き換えればよいと思っていたのですが、、

この方法だと、HTMLタグ中に入っていた改行コードもBRに置き換えられてしまい。

例えば

<img src="xxx" ¥n alt="xxx">



<img src="xxx" <br> alt="xxx">

になってしまいます。

正規表現を使えば、タグの中の改行コード以外をBRに置き換えるという処理ができそうなのですが、処理方法がわかりません。

割と普通に使われそうな感じだったので、ググッて見たのですが、解りませんでした。


*ここは確認しましたが、これだけでは理解できませんでした。
http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag


具体的なコードを示していただけるととても助かります。

●質問者: ecmas
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:br HTML PHP コード タグ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GEN111
●20ポイント

これでいけませんかね。

$replaced = preg_replace ('/(<[^>]+?>)|\n/', '$1<br>', $html) ;
◎質問者からの返答

ご回答、ありがとうございます。

さっそく試してみます。

【追記】

試してみました。

大体の場合で大丈夫そうですが。

'や"の中に>が含まれている場合は、やはりダメなようでした。

http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag

のURLにその判定方法があるみたいなんですが、、

ちょっと考えて見ます。


2 ● nandedarou
●30ポイント
$replaced = preg_replace ('/((<("[^"]*"|[^>])*>)?.*?)\n/', '$1<br>', $html) ;

これで、どうでしょうか?

◎質問者からの返答

ありがとうございます。

これで、'や"の中に>が含まれている場合にもきちんと対応できました^^


でも、まだ一つ問題がありました。



「>」が最後に来ている文字列に置き換えを行った場合、そのタグの中の¥nは
になってしまうようです。

例えば、こんな場合にうまく行きません。

$html = '<strong>あいうえお</strong¥n>';


他にも試してみたところ、これもダメでした。

$html = '<strong>あいうえお</strong¥n>\n\n\n\n\n';


でもこれだとOKです。



$html = '<strong>あいうえお</strong¥n>\n\n\n\n\nかきくけこ';


とはいえ、実際に上記のようなケースに当てはまることはけっこうレアな気がします。。


3 ● nandedarou
●30ポイント ベストアンサー
$replaced = preg_replace ('/(((<(["\'][^"\']*["\']|[^>])*>).*?)\n|\n)/', '$2<br>', $html) ;

これでは?

◎質問者からの返答

ありがとうございます。

でもやはり、


$html = '<strong>あいうえお</strong¥n>';


がうまくいきませんでした。



それと先ほどの返信、

$html = '<strong>あいうえお</strong¥n>\n\n\n\n\n';

がうまく行かないのは嘘でした、末端の改行をトリム処理しているのをすっかり忘れておりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ