[PHP] 데이터 <BR>태그로 자동줄바꿈, 링크감지 기능 추가하기
적용 샘플은 http://pin.readiz.com/ 에서 확인하실 수 있습니다. 심심하신 분들은 접속해서 사용해보세요. 아직 개발중인 페이지라 별다른 건 없지만 적용예제를 확인해보실 수 있습니다.
자동줄바꿈 함수
사실 이 문제를 해결하기는 했지만 str_replace가 왜 적용이 안되는지 모르겠습니다. 일단 <BR>태그를 삽입하는 것은 이론은 간단하죠. \n줄바꿈 문자를 <br>태그로 치환하면 되는 겁니다. 하지만 PHP에는 이미 전용 함수가 있기 때문에 이를 쓰면 됩니다.
nl2br라는 함수가 바로 그 함수인데요, reference를 보면,
Description ¶
$string
[, bool $is_xhtml
= true ] )Returns string
with '<br />' or '<br>' inserted before all newlines (\r\n, \n\r, \n and \r).
그저 문자열을 넘기면, <br>태그를 붙여서 문자열을 반환해줍니다. 아래와 같이 사용하시면 됩니다.
$body = nl2br($body);
근데 아래 코드는 안되더라구요. 혹시 되시는 분들은 좀 알려주세요..
str_replace("\n", "<br/>", $body);
자동링크감지 코드
자동링크감지는 preg_replace라는 함수를 사용합니다. 정규표현식을 이용해서 특정한 문자열세트를 링크를 거는 태그를 추가해서 바꿔버리는건데요, 역시 정규표현식의 간결함을 느낄 수 있는 코드입니다.
Description ¶
$pattern
, mixed $replacement
, mixed $subject
[, int $limit
= -1 [, int &$count
]] )Searches subject
for matches to pattern
and replaces them with replacement
.
사실 직접 만들기는 좀 난이도가 있어요. 정규표현식을 공부한 사람들도 실수를 하곤 하니까요.. 워낙 예측하기가 힘든 함수기 때문에 만들어진 것을 사용하는걸 추천드립니다. 아래 코드를 쓰시면 됩니다. http:// 랑 ftp://, https://를 탐지, 감지하는 코드입니다.
$body = preg_replace('/((http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/', '<a href="\1">\1</a>', $body);
만약 http, ftp, https 말고 다른 것도 감지하려면 (mms라던지) 맨 앞부분을 수정하면 됩니다. http|ftp|https|mms 이런식으로 말이죠.