본문 바로가기

Creation/Programming

[PHP] 데이터 <BR>태그로 자동줄바꿈, 링크감지 기능 추가하기




  적용 샘플은 http://pin.readiz.com/ 에서 확인하실 수 있습니다. 심심하신 분들은 접속해서 사용해보세요. 아직 개발중인 페이지라 별다른 건 없지만 적용예제를 확인해보실 수 있습니다.



자동줄바꿈 함수


  사실 이 문제를 해결하기는 했지만 str_replace가 왜 적용이 안되는지 모르겠습니다. 일단 <BR>태그를 삽입하는 것은 이론은 간단하죠. \n줄바꿈 문자를 <br>태그로 치환하면 되는 겁니다. 하지만 PHP에는 이미 전용 함수가 있기 때문에 이를 쓰면 됩니다.


  nl2br라는 함수가 바로 그 함수인데요, reference를 보면,


Description ¶

string nl2br ( string $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 ¶

mixed preg_replace ( mixed $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 이런식으로 말이죠.