그누보드

그누보드 사용자들을 위한 정보 공유 공간! 설치, 테마, 플러그인, 커스터마이징 팁 등 그누보드에 대한 모든 것을 이야기해보세요!

2025.02.22 00:00

그누보드:url_auto_link() URL 자동 링크 기능

  • 나우호스팅 21일 전 2025.02.22 00:00
  • 18
    0

/*

 * 그누보드 원본 코드 분석 (LGPL 라이선스 적용) 

 * 출처: https://github.com/gnuboard/gnuboard5

 * 라이선스: GNU General Public License v2.0 또는 그 이후 버전

*/
function url_auto_link($str)
{
    global $g5;
    global $config;

    // 140326 유창화님 제안코드로 수정
    // http://sir.kr/pg_lecture/461
    // http://sir.kr/pg_lecture/463
    $attr_nofollow = (function_exists('check_html_link_nofollow') && check_html_link_nofollow('url_auto_link')) ? ' rel="nofollow"' : '';
    $str = str_replace(array("<", ">", "&", """, " ", "'"), array("t_lt_t", "t_gt_t", "&", """, "t_nbsp_t", "'"), $str);
    //$str = preg_replace("`(?:(?:(?:href|src)s*=s*(?:"|'|)){0})((http|https|ftp|telnet|news|mms)://[^"'s()]+)`", "\1", $str);
    $str = preg_replace("/([^(href="?'?)|(src="?'?)]|(|^)((http|https|ftp|telnet|news|mms)://[a-zA-Z0-9.-]+.[가-힣xA1-xFEa-zA-Z0-9.:&#!=_?/~+%@;-|,()]+)/i", "\1\2", $str);
    $str = preg_replace("/(^|["'s(])(www.[^"'s()]+)/i", "\1\2", $str);
    $str = preg_replace("/[0-9a-z_-]+@[a-z0-9._-]{4,}/i", "\0", $str);
    $str = str_replace(array("t_nbsp_t", "t_lt_t", "t_gt_t", "'"), array(" ", "<", ">", "'"), $str);

    /*
    // 속도 향상 031011
    $str = preg_replace("/</", "t_lt_t", $str);
    $str = preg_replace("/>/", "t_gt_t", $str);
    $str = preg_replace("/&/", "&", $str);
    $str = preg_replace("/"/", """, $str);
    $str = preg_replace("/ /", "t_nbsp_t", $str);
    $str = preg_replace("/([^(http://)]|(|^)(www.[^[:space:]]+)/i", "\1\2", $str);
    //$str = preg_replace("/([^(HREF="?'?)|(SRC="?'?)]|(|^)((http|https|ftp|telnet|news|mms)://[a-zA-Z0-9.-]+.[xA1-xFEa-zA-Z0-9.:&#=_?/~+%@;-|,]+)/i", "\1\2", $str);
    // 100825 : () 추가
    // 120315 : CHARSET 에 따라 링크시 글자 잘림 현상이 있어 수정
    $str = preg_replace("/([^(HREF="?'?)|(SRC="?'?)]|(|^)((http|https|ftp|telnet|news|mms)://[a-zA-Z0-9.-]+.[가-힣xA1-xFEa-zA-Z0-9.:&#=_?/~+%@;-|,()]+)/i", "\1\2", $str);

    // 이메일 정규표현식 수정 061004
    //$str = preg_replace("/(([a-z0-9_]|-|.)+@([^[:space:]]*)([[:alnum:]-]))/i", "\1", $str);
    $str = preg_replace("/([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-_.]?[0-9a-z])*.[a-z]{2,4})/i", "\1", $str);
    $str = preg_replace("/t_nbsp_t/", " " , $str);
    $str = preg_replace("/t_lt_t/", "<", $str);
    $str = preg_replace("/t_gt_t/", ">", $str);
    */

    return run_replace('url_auto_link', $str);
}


URL 자동 링크 함수

GNUBoards는 PHP 기반의 게시판 소프트웨어로, 다양한 기능을 제공합니다. URL 자동 링크 함수는 사용자가 입력한 텍스트 내의 URL을 자동으로 링크로 변환하는 기능입니다.

함수 소스 코드


#hostingforum.kr
php

function url_auto_link($str)

{

    global $g5;

    global $config;



    // ...

}



함수 설명


* `global $g5;` : `$g5` 변수를 전역 변수로 선언합니다.
* `global $config;` : `$config` 변수를 전역 변수로 선언합니다.
* `$attr_nofollow` : `check_html_link_nofollow` 함수가 존재하고 `url_auto_link` 함수를 호출할 경우 `rel=\"nofollow\"` 속성을 추가합니다.

텍스트 처리


#hostingforum.kr
php

$str = str_replace(array("<", ">", "&", """, " ", "'"), array("t_lt_t", "t_gt_t", "&", "\"", "t_nbsp_t", "'"), $str);



* `str_replace` 함수를 사용하여 특수 문자를 HTML 엔티티로 변환합니다.

URL 자동 링크


#hostingforum.kr
php

$str = preg_replace("/([^(href=\"?'?)|(src=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms)://[a-zA-Z0-9.-]+.[가-힣xA1-xFEa-zA-Z0-9.:&#=_?/~+%@;\-\|,\(\)]+)/i", "\1", $str);



* `preg_replace` 함수를 사용하여 URL을 자동으로 링크로 변환합니다.
* `i` 플래그를 사용하여 대소문자를 구분하지 않습니다.
* `{$config['cf_link_target']}` : `$config` 변수의 `cf_link_target` 키 값을 사용하여 링크를 열 때의 타겟을 지정합니다.

이메일 자동 링크


#hostingforum.kr
php

$str = preg_replace("/([0-9a-z]([-_\.]?[0-9a-z])*@[0-9a-z]([-_\.]?[0-9a-z])*.[a-z]{2,4})/i", "\1", $str);



* `preg_replace` 함수를 사용하여 이메일 주소를 자동으로 링크로 변환합니다.
* `i` 플래그를 사용하여 대소문자를 구분하지 않습니다.

반환


#hostingforum.kr
php

return run_replace('url_auto_link', $str);



* `run_replace` 함수를 호출하여 `$str` 변수의 내용을 반환합니다.

예제


#hostingforum.kr
php

$str = "http://example.com";

echo url_auto_link($str); // http://example.com



$str = "example@example.com";

echo url_auto_link($str); // example@example.com



URL 자동 링크 함수를 사용하여 사용자가 입력한 텍스트 내의 URL을 자동으로 링크로 변환할 수 있습니다. 이 함수는 이메일 주소도 자동으로 링크로 변환합니다.

이 게시물에 포함된 라이브러리

[PHP] str_replace - 검색 문자열의 모든 발생을 대체 문자열로 바꿉니다.
[PHP] preg_replace - 정규 표현식 검색 및 바꾸기 수행
[PHP] mail - 메일 보내기
[PHP] link - 하드 링크 생성
[PHP] glob - 패턴과 일치하는 경로 이름 찾기
[PHP] function_exists - 주어진 함수가 정의되어 있으면 true를 반환합니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 그누보드 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 5건 / 1 페이지

검색

게시물 검색