BOARD

강좌·기초

PHP와 그누보드 환경에서 주요 동영상 플랫폼 URL 링크를 임베드 코드로 변환하여 출력하는 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 5회 작성일 26-10-08 17:02

본문

PHP와 그누보드 환경에서 주요 동영상 플랫폼 URL 링크를 임베드 코드로 변환하여 출력하는 방법

유튜브, 비메오, 네이버 등 다양한 동영상 공유 주소를 입력했을 때 HTML 페이지에서 영상이 즉시 재생되도록 변환하는 PHP 파싱 및 출력 코드를 적용할 수 있습니다.

PHP를 이용한 주요 동영상 플랫폼 링크 임베드 출력 방법

HTML 페이지에서 유튜브, 비메오, 다음팟, 네이버 등의 동영상 공유 URL을 이용해 영상을 바로 출력하려면 PHP의 preg_match 함수와 explode 함수를 조합하여 각 플랫폼별 고유 영상 ID를 추출하고, 이에 맞는 임베드 태그(object, embed, iframe)를 동적으로 생성하는 로직을 사용합니다.

1. 유튜브(YouTube) 링크 파싱 및 출력

유튜브 주소는 youtu.be 단축 URL 형식과 youtube.com/watch?v= 표준 URL 형식이 존재합니다.

  • 단축 URL (youtu.be) 처리 예시
$movie_url = $view["wr_link1"]; // 동영상 링크
if (preg_match('/youtu.be/', $movie_url) == true) {
 $movie_url0 = explode('/', $movie_url);
 $movie_url3 = $movie_url0[3];
 if ($movie_url3) {
 echo '<object width="640" height="360"><param name="movie" value="http://www.youtube.com/v/'. $movie_url3. '?version=3&hl=ko_KR"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'. $movie_url3. '?version=3&hl=ko_KR" type="application/x-shockwave-flash" width="640" height="360" allowscriptaccess="always" allowfullscreen="true"></embed></object><br>';
 }
}
  • 일반 URL (youtube.com) 처리 예시
if (preg_match('/youtube.com/', $movie_url) == true) {
 $movie_url0 = explode('?v=', $movie_url);
 $movie_url3 = $movie_url0[1];
 if ($movie_url3) {
 echo '<object width="640" height="360"><param name="movie" value="http://www.youtube.com/v/'. $movie_url3. '?version=3&hl=ko_KR"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'. $movie_url3. '?version=3&hl=ko_KR" type="application/x-shockwave-flash" width="640" height="360" allowscriptaccess="always" allowfullscreen="true"></embed></object><br>';
 }
}

2. 비메오(Vimeo) 링크 파싱 및 출력

비메오는 vimeo.com 주소 체계에서 경로를 분할하여 고유 ID를 추출한 뒤 iframe 태그로 출력합니다.

if (preg_match('/vimeo.com/', $movie_url) == true) {
 $movie_url0 = explode('/', $movie_url);
 $movie_url3 = $movie_url0[5];
 if ($movie_url3) {
 echo '<iframe src="//player.vimeo.com/video/'. $movie_url3. '" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe><br>';
 }
}

3. 다음팟(Daum Pot) 링크 파싱 및 출력

다음팟(tvpot.daum.net) 주소는 explode로 고유 ID를 추출하여 object 및 embed 태그로 구성합니다.

if (preg_match('/tvpot.daum.net/', $movie_url) == true) {
 $movie_url0 = explode('/', $movie_url);
 $movie_url3 = $movie_url0[4];
 if ($movie_url3) {
 echo "<object type='application/x-shockwave-flash' id='DaumVodPlayer_". $movie_url3. "' width='640px' height='360px' align='middle' classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,3,0,0'><param name='movie' value='http://videofarm.daum.net/controller/player/VodPlayer.swf'><param name='allowScriptAccess' value='always'><param name='allowFullScreen' value='true'><param name='bgcolor' value='#000000'><param name='wmode' value='window'><param name='flashvars' value='vid=". $movie_url3. "&playLoc=undefined&alert=true'><embed src='http://videofarm.daum.net/controller/player/VodPlayer.swf' width='640px' height='360px' allowScriptAccess='always' type='application/x-shockwave-flash' allowFullScreen='true' bgcolor='#000000' flashvars='vid=". $movie_url3. "&playLoc=undefined&alert=true'></embed></object><br>";
 }
}

4. 네이버(Naver) 링크 파싱 및 출력

네이버 동영상(nmv.naver.com)의 경우 쿼리 스트링(?)과 &width= 구분자를 중첩 사용하여 파라미터를 파싱합니다.

if (preg_match('/nmv.naver.com/', $movie_url) == true) {
 $movie_url0 = explode('?', $movie_url);
 $movie_url2 = $movie_url0[1];
 $movie_url4 = explode('&width=', $movie_url2);
 $movie_url3 = $movie_url4[0];
 if ($movie_url3) {
 echo "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0' width='640' height='360' id='NFPlayer03496' align='middle'><param name='allowScriptAccess' value='always'><param name='allowFullScreen' value='true'><param name='movie' value='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?". $movie_url3. "'><param name='wmode' value='window'><embed src='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?". $movie_url3. "' wmode='window' width='640' height='360' allowScriptAccess='always' name='NFPlayer03496' allowFullScreen='true' type='application/x-shockwave-flash'></object><br>";
 }
}

그누보드 보안 필터링 해결 방법

그누보드5 환경에서 본문에 iframe, object, embed 태그를 사용할 때 보안 필터링으로 인해 태그가 사라지거나 영상이 출력되지 않는 경우, 다음 설정을 확인하십시오.

보안 허용 도메인 추가

그누보드5는 보안을 위해 plugin/htmlpurifier/safeiframe.txt 파일에 등록된 도메인의 iframe 태그만 허용합니다. 해당 파일에 유튜브(youtube.com), 비메오(vimeo.com) 등의 도메인을 추가하면 정상적으로 출력됩니다.

그누보드 보안 필터링 관련 주의사항

그누보드5 환경에서 본문에 iframe 태그를 사용할 때 보안 필터링으로 차단되는 경우, 그누보드5/plugin/htmlpurifier/safeiframe.txt 파일에 허용할 도메인을 추가하여 처리할 수 있습니다.

상황별 판단 가이드

  • 유튜브·비메오·네이버 등 공유 주소 원본을 그대로 이용해 HTML 페이지에 영상을 바로 출력하려는 경우
    • 우선할 판단: preg_match와 explode 함수를 조합하여 플랫폼별 도메인(youtu.be, youtube.com, vimeo.com, nmv.naver.com 등)을 검증하고 고유 영상 ID를 안전하게 파싱합니다.
    • 다음 행동: 추출된 ID를 각 플랫폼 규격에 맞는 object, embed, iframe 태그 문자열에 동적으로 대입하여 출력 코드를 완성합니다.
  • 그누보드 환경에서 해당 소스를 적용할 때 영상이 출력되지 않거나 태그가 필터링되는 경우
    • 우선할 판단: 그누보드 보안 설정 및 HTML Purifier 기능으로 인해 iframe이나 object 태그가 차단되는지 확인합니다.
    • 다음 행동: plugin/htmlpurifier/safeiframe.txt 파일에 허용할 외부 동영상 플랫폼의 도메인을 등록하여 정상 출력을 유도합니다.

실전 FAQ

  • Q. 플랫폼별로 URL 구조가 다를 때 고유 ID를 안정적으로 추출하려면 어떻게 해야 하나요?
    • A. preg_match로 어떤 플랫폼의 주소인지 먼저 판별한 뒤, 유튜브 단축 URL은 슬래시(/) 기준으로 분할하고 표준 URL은 쿼리 스트링(?v=)을 기준으로 explode 함수를 적용하여 영상 고유 번호만 정확히 분리해냅니다.
  • Q. 네이버 동영상처럼 쿼리 파라미터가 복잡하게 얽혀 있는 URL은 어떻게 파싱하나요?
    • A. 첫 번째 explode('?', $movie_url)로 쿼리 스트링 전체를 분리한 후, 추가로 &width= 등의 구분자를 이용해 필요한 파라미터 값만 단계별로 잘라내어 재생 소스에 전달해야 합니다.
  • Q. 그누보드 게시판이나 내용관리에서 코드를 넣었는데 빈 화면만 나오거나 태그가 사라집니다.
    • A. 그누보드의 XSS 보안 필터링 규칙 때문입니다. plugin/htmlpurifier/safeiframe.txt 파일에 대상 도메인을 추가하거나 에디터 설정에서 해당 태그 허용 범위를 조정해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.