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파일에 허용할 외부 동영상 플랫폼의 도메인을 등록하여 정상 출력을 유도합니다.
- 우선할 판단: 그누보드 보안 설정 및 HTML Purifier 기능으로 인해
실전 FAQ
- Q. 플랫폼별로 URL 구조가 다를 때 고유 ID를 안정적으로 추출하려면 어떻게 해야 하나요?
- A.
preg_match로 어떤 플랫폼의 주소인지 먼저 판별한 뒤, 유튜브 단축 URL은 슬래시(/) 기준으로 분할하고 표준 URL은 쿼리 스트링(?v=)을 기준으로explode함수를 적용하여 영상 고유 번호만 정확히 분리해냅니다.
- A.
- Q. 네이버 동영상처럼 쿼리 파라미터가 복잡하게 얽혀 있는 URL은 어떻게 파싱하나요?
- A. 첫 번째
explode('?', $movie_url)로 쿼리 스트링 전체를 분리한 후, 추가로&width=등의 구분자를 이용해 필요한 파라미터 값만 단계별로 잘라내어 재생 소스에 전달해야 합니다.
- A. 첫 번째
- Q. 그누보드 게시판이나 내용관리에서 코드를 넣었는데 빈 화면만 나오거나 태그가 사라집니다.
- A. 그누보드의 XSS 보안 필터링 규칙 때문입니다.
plugin/htmlpurifier/safeiframe.txt파일에 대상 도메인을 추가하거나 에디터 설정에서 해당 태그 허용 범위를 조정해야 합니다.
- A. 그누보드의 XSS 보안 필터링 규칙 때문입니다.
함께 보면 좋은 글
참고자료
기타 참고자료
- 이전글PHP에서 구글 맵 지오코딩 API를 이용한 주소 좌표 추출 가이드 26.10.08
- 다음글PHP 세션(SESSION) 관리 가이드: 생성, 사용 및 삭제 26.10.08
댓글목록
등록된 댓글이 없습니다.