#엘카북 #마이로그 #서명

원본 코드

@php
    $signature = $_member_info->signature ?? '';
    $signature = str_ireplace(['<\/div>', '<\/p>', '<\/li>'], '<br />', $signature);
    $signature = preg_replace('/<(?!br\s*\/?)[\s\S]*?>|^(?:\s|&nbsp;|<br \/>)+|(?:<br \/>|&nbsp;|\s)+$/uis', '', $signature);
    $signature = preg_replace('/(<br\s*\/?>\s*)+/ius', '<br />', $signature);
@endphp
@if(strlen($signature))
    <div class="signature li"><p class="ib">{$signature}</p></div>
@endif


설명

  • 닫는 태그(</div>, </p>, </li>)를 <br />로 변경
  • HTML 태그(단 <br /> 제외), 앞뒤 공백 제거
  • 연속된 <br />을 하나로 줄임
  • 서명이 존재하면 <div> 태그 안에 출력

이렇게 하면 서명이 깨끗하게 정리된 상태로 출력되며, HTML이 남지 않고 줄 바꿈이 유지됩니다.


궁금한점

PHP에는 HTML을 제거하는 함수도 있는데 왜 저렇게 사용한 걸까요?


예제1)

$signature = $_member_info->signature ?? ''

$signature = strip_tags($signature); 

$signature = trim($signature); // 앞뒤 공백 제거 

echo $signature;


예제2)

$signature = $_member_info->signature ?? '';

$signature = strip_tags($signature);

$signature = html_entity_decode($signature, ENT_QUOTES | ENT_HTML5, 'UTF-8');

$signature = trim($signature);

echo $signature;


html_entity_decode()를 사용하면 &nbsp;, &lt;, &gt; 같은 HTML 엔터티도 변환됩니다.


기존 코드에서 br 태그만 살리고 싶다면

@php
    $signature = $_member_info->signature ?? '';

    // </div>, </p>, </li>를 <br>로 변경 (백슬래시 제거)
    $signature = str_ireplace(['</div>', '</p>', '</li>'], '<br />', $signature);

    // <br> 태그만 남기고 나머지 HTML 태그 제거
    $signature = preg_replace('/<(?!br\s*\/?)[^>]+>/i', '', $signature);

    // 불필요한 공백, &nbsp;, 여러 개의 <br>를 하나의 <br>로 정리
    $signature = preg_replace('/^(?:\s|&nbsp;|<br\s*\/?>)+|(?:<br\s*\/?>|&nbsp;|\s)+$/iu', '', $signature);
    $signature = preg_replace('/(<br\s*\/?>\s*)+/iu', '<br />', $signature);
@endphp

@if(strlen($signature))
    <div class="signature li"><p class="ib">{!! $signature !!}</p></div>
@endif