cosian.com

本文にソースコードを表示するためのカスタマイズ

2019-07-25

system

このブログは本文はtextareaでできている。
DBに登録するときにタグをとダブルクォーテーションを正規表示に切り替え、表示するときにデコードしている。
改行は\nになるので、n2lbr関数で改行処理を行っていた。

さて、ではソースコードを挿入しようと思うとソースで改行している部分にbrが挿入されてえらくかっこ悪くなった。
基本的に使うタグはpreなので、このソースに絞って改行処理を切り替える関数を作成した。

  1. function nobrBody( $string )
  2. {
  3. $search_str = "pre";
  4. $search_str2 = "/pre";
  5. if ( strpos($string, $search_str) !== false ) {
  6. //preが含まれている数をカウント
  7. $count = mb_substr_count($string, $search_str);
  8. //タグありなしで文章を分ける
  9. for ($ii = 0; $ii < $count; $ii ) {
  10. $brbody = mb_strstr( $string, $search_str, ture );
  11. $nobrBody = mb_strstr( $string, $search_str );
  12. $nobrBody = mb_strstr( $nobrBody, $search_str2, true );
  13. $string = mb_strstr( $string, $search_str );
  14. $string = mb_strstr( $string, $search_str2 );
  15. $strwk .= preg_replace("/\r\n|\r|\n/", '改行', $brbody);
  16. $strwk .= preg_replace("/\r\n|\r|\n/", '', $nobrBody);
  17. }
  18. $strwk .= preg_replace("/\r\n|\r|\n/", '改行', $string);
  19. } else {
  20. $strwk = preg_replace("/\r\n|\r|\n/", '改行', $string);
  21. }
  22. return $strwk;
  23. }


preタグを探して、preタグ内は改行せずにして、それ以外は改行するように処理をしている。
ややこしかったのはmb_strstr関数の第三引数にtrueを入れると検索した値以前を取得になるのだが、この場合は値が含まれない。
逆にtrueを入れないと検索した値以降を取得となるが、この場合は値が含まれる。
今は無事表示されているが、何か不備がありそうな気がする。

コメントを書く
コメント
お名前