logo

문자열 중 url만 걸러내서 태그를 씌워 반환

Server Side March 05, 2019

게시글 내용이나 댓글 내용등에 url이 있다면 해당 문자열을 추출해 특정 태그를 씌워 반환하는 코드입니다.

 

url 주소는 정말 url 답게 별도의 링크 태그로 변환해줍니다. 특이점이라면 사용자는 태그 고려 전혀 안하고 url만 평범하게 입력하면 뒷단에서 처리해준다는 점이죠.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/**
 * 인수값으로 넘어온 텍스트 문장중에 url주소형태가 있다면 해당 텍스트에 링크를 씌워 반환합니다.
 * @param $text
 * @return mixed
 */
function url_text($text) {
  // The Regular Expression filter
  $reg_exUrl = "/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/";
 
  // Check if there is a url in the text
  if(preg_match_all($reg_exUrl$text$url)) {
    // make the urls hyper links
    foreach ($url[0as $link) {
      $text =  str_replace($link".$link."" class="inner-link" target="_blank">".$link."" class="inner-link" target="_blank">.$link.""$text);
    }
  }
 
  return $text;
}
cs

 

좀 더 응용한다면 url 주소가 추출된 정보로 페이지 조회를 실시해 타이틀정보나 섬네일 등을 빼와서 태그에 같이 제공하는 방법도 있을거에요.

꼭 태그를 씌울때 위에 처럼 안씌우고 span 태그로 별도의 스크립트 처리대상이 되게 할 수도 있구요.

 

응용하기 나름인 베이스 코드라고 보시면 되겠습니다.

 

정규표현식 자체는 구글링을 통해 구했고 테스트하다가 의도치 않은 검출에 대해서 일부 자체적으로 수정했습니다.