HTMLタグを無視して文字列を丸めたい

ブログいじり中に文字列を丸めたいところがありました。
しかし、その文字列にはHTMLタグが含んでいるという。
普通に丸めるとHTMLタグがおかしくなったり、消えちゃったり・・・
ここではそんなことがないようにうまく丸める方法を紹介します。(大嘘)

スポンサーリンク

まず文字列を丸める方法を調べて出てきたのが、mb_substrとかmb_strimwidthとかです。
これらはマルチバイト文字を考慮して文字列を丸めてくれます。
問題点としてHTMLタグを判断できません。
ですのでこれではダメです。

次に考えたのがHTMLタグを省いてくれるstrip_tagsを使うことです。
200文字に丸める場合こんな感じに記述します。

$str = mb_substr(strip_tags($str), 0, 200, 'UTF-8');

これだとHTMLタグが省かれた状態で丸めてくれるのですが、HTMLタグが省かれたままになってしまって意味がありません。
PHPだとできないと思い、違う言語で実装できるか考えてみます。

Javascriptならと思って調べてみました。
調べまくって自分なりにjQueryで書いてみたんですけど・・・

$('.str').each(function() {
  var str = $(this).text();
  if (str.length > 200) {
    $(this).text(str.substring(0, 200) + "…");
  }
});

結果はPHPと一緒なんですよね、はい。
strっていうクラス引っ張ってきて、HTMLタグを除去して丸めているだけです。

色々調べた結果、私が一番したいことはどうやっても無理っぽそうです(´・ω・`)
どうにかしてHTMLタグを無視して文字列の長さを調べて、HTMLタグが入った状態でHTMLタグを無視して文字列を丸めるとはできないのでしょうか・・・
発想はあるんだけどそれを実装できるような関数もないし頭もない、もうちょっと考えてみます。

スポンサーリンク

Leave a Comment