> 백엔드 개발 > PHP 튜토리얼 > 정규식을 사용하여 PHP 텍스트에서 URL을 어떻게 감지하고 연결할 수 있습니까?

정규식을 사용하여 PHP 텍스트에서 URL을 어떻게 감지하고 연결할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-18 10:41:18
원래의
262명이 탐색했습니다.

How Can I Detect and Linkify URLs in PHP Text Using Regular Expressions?

텍스트의 URL 감지 및 연결

사용자 제공 텍스트로 작업할 때 텍스트에 포함된 URL을 식별하고 연결해야 하는 경우가 많습니다. . PHP에서 이를 달성하는 방법은 다음과 같습니다.

정규식 사용

URL을 감지하려면 다음 정규식을 사용할 수 있습니다.

$rexProtocol = '(https?://)?';
$rexDomain   = '((?:[-a-zA-Z0-9]{1,63}\.)+[-a-zA-Z0-9]{2,63}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})';
$rexPort     = '(:[0-9]{1,5})?';
$rexPath     = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?';
$rexQuery    = '(\?[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';
$rexFragment = '(#[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';

$regex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";
로그인 후 복사

이 정규식은 다음과 일치합니다:

  • 선택적 프로토콜(http:// 또는 https://)
  • 도메인 이름 또는 IP 주소
  • 선택적 포트 번호
  • 선택적 경로
  • 선택적 쿼리 문자열
  • 선택적 조각 식별자

생성 하이퍼링크

URL이 감지되면 다음 콜백 함수를 사용하여 HTML 하이퍼링크를 생성할 수 있습니다.

function callback($match)
{
    $completeUrl = $match[1] ? $match[0] : "http://{$match[0]}";

    return '<a href="' . $completeUrl . '">'
        . $match[2] . $match[3] . $match[4] . '</a>';
}
로그인 후 복사

이 함수는 프로토콜이 지정되지 않은 경우 "http://" 앞에 추가됩니다. 감지된 URL을 href 속성으로 사용하여 HTML 앵커 태그를 생성합니다.

Regex 및 콜백

마지막으로 preg_replace_callback을 사용하여 정규식을 적용하고 감지된 모든 URL에 대한 하이퍼링크를 생성할 수 있습니다.

$text = "Here are some URLs: stackoverflow.com/questions/1188129/pregreplace-to-detect-html-php";

print preg_replace_callback($regex, 'callback', htmlspecialchars($text));
로그인 후 복사

이렇게 하면 감지된 URL이 클릭 가능한 링크로 변환된 텍스트가 출력됩니다. .

추가 고려 사항

  • XSS 공격을 방지하려면 정규식으로 처리하기 전에 사용자 제공 텍스트를 이스케이프 처리하세요.
  • 제공된 정규식은 모든 URL 구문 변형을 지원하지 않습니다. 특정 요구 사항에 따라 이를 구체화해야 할 수도 있습니다.
  • 유사한 접근 방식을 사용하여 이메일 주소를 감지하고 하이퍼링크할 수도 있습니다.

위 내용은 정규식을 사용하여 PHP 텍스트에서 URL을 어떻게 감지하고 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿