게시판 링크 입력시 유튜브 동영상 출력

게시판 링크 입력시 유튜브 동영상 출력

QA

게시판 링크 입력시 유튜브 동영상 출력

본문

안녕하세요!

 

게시판 글쓰기 화면에 링크를 총5개 입력하게끔 수정해놓았고

 

그 링크에 유튜브 링크를 입력하면 view 화면에 유튜브 화면이 뜨게 스킨을 이용하였습니다.

 

그런데 링크가 1개만 유튜브 영상이 나오고 나머지 4개는 화면이 아닌 링크로 화면이 나옵니다.

 

5개 링크 모두 유튜브 동영상이 바로 보이게끔 하는방법이 있을까요??

 

write.skin.php 코드


<?php for ($i = 1; $is_link && $i <= 5; $i++) { ?>
        <div class="bo_w_link write_div">
          <label for="wr_link<?php echo $i ?>"><i class="fa fa-link" aria-hidden="true"></i><span class="sound_only"> 링크
              #<?php echo $i ?></span></label>
          <input type="text" name="wr_link<?php echo $i ?>" value="<?php if ($w == "u") {
                                                                      echo $write['wr_link' . $i];
                                                                    } ?>" id="wr_link<?php echo $i ?>" class="frm_input full_input" size="50">
        </div>
      <?php } ?>
 
 

 

 

view.skin.php 코드

 

<?php
        ## 저장된 주소값을 "/" 을 기준으로 나눈다.
        $youtube = explode("/", $view['wr_link1']);
 
        ## 링크가 있다면 유튜브 출력
        if ($view['wr_link1']) {
          ## end() 함수로 마지막 배열값을 삽입
        ?>
          <iframe src="https://www.youtube.com/embed/<?php echo end($youtube); ?>" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
        <?php } ?>
 
 
 

 

 

 

2041395728_1731376617.5378.png

이 질문에 댓글 쓰기 :

답변 2


<?php
    // 최대 5개의 링크를 배열로 저장
    $links = [
        $view['wr_link1'],
        $view['wr_link2'],
        $view['wr_link3'],
        $view['wr_link4'],
        $view['wr_link5']
    ];
    // 각 링크를 순회하며 iframe 생성
    foreach ($links as $link) {
        // 링크가 비어있지 않은지 확인
        if (!empty($link)) {
            // 링크를 "/" 기준으로 분할하여 마지막 부분(비디오 ID) 추출
            $youtubeParts = explode("/", $link);
            $videoId = end($youtubeParts);
            // YouTube 비디오 ID가 유효한지 간단히 확인 (길이 등)
            if (!empty($videoId) && strlen($videoId) === 11) { // YouTube 비디오 ID는 일반적으로 11자
                echo '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . htmlspecialchars($videoId, ENT_QUOTES, 'UTF-8') . '" ';
                echo 'title="YouTube video player" frameborder="0" ';
                echo 'allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" ';
                echo 'allowfullscreen></iframe>';
                echo '<br>'; // 각 iframe 사이에 줄바꿈 추가
            }
        }
    }
?>
 


<?php
    // 최대 5개의 링크를 배열로 저장
    $links = [
        $view['wr_link1'],
        $view['wr_link2'],
        $view['wr_link3'],
        $view['wr_link4'],
        $view['wr_link5']
    ];

    // 각 링크를 순회하며 iframe 생성
    foreach ($links as $link) {
        // 링크가 비어있지 않은지 확인
        if (!empty($link)) {
            // YouTube URL 패턴에 맞는지 확인하고 비디오 ID 추출
            if (preg_match('/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([A-Za-z0-9_-]{11})/', $link, $matches)) {
                $videoId = $matches[1]; // 추출된 비디오 ID

                // iframe 출력
                echo '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . htmlspecialchars($videoId, ENT_QUOTES, 'UTF-8') . '" ';
                echo 'title="YouTube video player" frameborder="0" ';
                echo 'allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" ';
                echo 'allowfullscreen></iframe>';
                echo '<br>'; // 각 iframe 사이에 줄바꿈 추가
            } else {
                echo '<p>유효하지 않은 YouTube 링크: ' . htmlspecialchars($link, ENT_QUOTES, 'UTF-8') . '</p>';
            }
        }
    }
?>

답변을 작성하시기 전에 로그인 해주세요.
전체 126,884 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT