#엘카북 #마이로그 #서명
원본 코드
@php $signature = $_member_info->signature ?? ''; $signature = str_ireplace(['<\/div>', '<\/p>', '<\/li>'], '<br />', $signature); $signature = preg_replace('/<(?!br\s*\/?)[\s\S]*?>|^(?:\s| |<br \/>)+|(?:<br \/>| |\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()를 사용하면 , <, > 같은 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); // 불필요한 공백, , 여러 개의 <br>를 하나의 <br>로 정리 $signature = preg_replace('/^(?:\s| |<br\s*\/?>)+|(?:<br\s*\/?>| |\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