Stack Overflow의 PHP 자동 링크 기능 모방
Stack Overflow의 자동 링크 동작은 매우 편리하여 사용자가 쉽게 웹사이트에 연결할 수 있습니다. 또는 게시물 내의 특정 콘텐츠. 이 기사에서는 정규식 패턴을 활용하여 URL을 식별하고 HTML 링크로 변환하여 PHP에서 유사한 기능을 구현하는 방법을 살펴봅니다.
내부 작동 방식을 이해하기 위해 제공된 코드를 분석해 보겠습니다.
<code class="php">/** * Replace links in text with html links * * @param string $text * @return string */ function auto_link_text($text) { // a more readably-formatted version of the pattern is on http://daringfireball.net/2010/07/improved_regex_for_matching_urls $pattern = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))'; $callback = create_function('$matches', ' $url = array_shift($matches); $url_parts = parse_url($url); $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH); $text = preg_replace("/^www./", "", $text); $last = -(strlen(strrchr($text, "/"))) + 1; if ($last < 0) { $text = substr($text, 0, $last) . "&hellip;"; } return sprintf(\'<a rel="nofollow" href="%s">%s</a>\', $url, $text); '); return preg_replace_callback($pattern, $callback, $text); }</code>
정규식 패턴 분석:
정규식 패턴은 욕심 많은 검색(?i)을 초기화하고 다음 세그먼트를 찾습니다.
사용자 정의 콜백 함수:
콜백 함수는 HTML 링크 마크업을 구성합니다. URL을 추출하고, 구문 분석하고, 도메인에서 선행 "www"를 제거하고, 필요한 경우 표시되는 URL 텍스트를 제한하고, 마지막으로 적절한 속성을 가진 앵커 태그를 생성합니다.
샘플 입력 및 출력:
함수 작동을 설명하려면 다음 입력 텍스트를 고려하세요.
"이것은 내 텍스트입니다. StackOverflow에서 질문하는 방법을 알고 있는지 궁금합니다. https:/를 확인하세요. /www.php.cn/link/6e212075e04d1616b06a5e1398e10053
그리고 base_convert php 함수도요?
https://www.php.cn/link/63c0d1be32c9c7e2dee3ac21690e490c
https://www. php.cn/link/a995b410d5e76ed56523533b47e3786a"
auto_link_text() 함수로 처리한 후의 출력은 다음과 같습니다.
"StackOverflow에 대한 질문에 대해 알고 계시는지 궁금합니다. 확인하세요. 이게 stackoverflow.com/questions/1925455/…
그리고 base_convert php 함수도요?
pt.php.net/manual/en/…
이러한 기술을 구현함으로써 개발자는 Stack Overflow의 자동 연결 기능을 PHP 애플리케이션에 손쉽게 통합하여 사용자 경험을 향상시킬 수 있습니다. 작가와 독자 모두 콘텐츠 참조를 단순화합니다.
위 내용은 PHP에서 Stack Overflow의 자동 링크 기능을 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!