2026, 새로운 도약을 시작합니다.

글을 신규록/수정등록 할 때 전송된 내용을 parsing해서 저장하고 싶은데 어느 파일을 봐야할까요? 채택완료

1개월 전 조회 130

안녕하세요.

content에 입력한 글이

html 에디터에서 작성된 내용이 다음과 같은 텍스트가  전송됩니다.

내용 시작 ---->

<h1>김광석 너무아픈 사람이 아니었음을</h1>

https://www.youtube.com/watch?v=6OBUqiEeozc

<h1>잊어야 한다는 마음으로 </h1>

https://www.youtube.com/watch?v=hvDOUl_DikM

<-----내용끝

그런데 db에 저장할 때는  

db에 변경해서 저장하고 싶은 내용 시작 여기부터 -->

<h1>김광석 너무아픈 사람이 아니었음을</h1>

<div class="youtube_area"><iframe width="100%" height="100%" src="https://www.youtube.com/embed/6OBUqiEeozc" frameborder="0" allowfullscreen></iframe></div>

<h1>잊어야 한다는 마음으로 </h1>

<div class="youtube_area"><iframe width="100%" height="100%" src="https://www.youtube.com/embed/hvDOUl_DikM" frameborder="0" allowfullscreen></iframe></div>

<--여기까지 db에 변경해서 저장하고 싶은 내용 끝

그럼 wr_content가 넘어갈 때 유튜브주소를 파싱해서 id를 걸러내서 

iframe 태그를 붙여서 저장하고 싶은데......

bbs말고

skin폴더 내에서 insert나 update sql 실행전에 

parsing을 하려면 어떻게 하나요?

어느 파일에서 손봐야 할까요?

답변 3개

채택된 답변
+20 포인트

아래의 내용을 참고해보세요..

* write_update.php 수정

// 유튜브 URL을 iframe으로 변환하는 함수


function convert_youtube_to_iframe($content) {


    $pattern = '/__https?:\/\/(?:www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9_-]+)__/i';
    $replacement = '<div class="youtube_area"><iframe width="100%" height="100%" src="https://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></div>';
    
    $content = preg_replace($pattern, $replacement, $content);
    
    $pattern2 = '/__https?:\/\/youtu\.be\/([a-zA-Z0-9_-]+)__/i';
    $content = preg_replace($pattern2, $replacement, $content);
    
    return $content;
}


$wr_content = convert_youtube_to_iframe($wr_content);

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

답변 정말 감사드려요.
그런데 write_update.php에서는 되는데
스킨폴더내에서 write_update.skin.php에서는 안되네요.
bbs는 건드리고 싶지 않은데 스킨폴더내에서 이와 같이 하는 방법은 없나요?

댓글을 작성하려면 로그인이 필요합니다.

해결했어요. 

https://sir.kr/qa/261447

작은별 님의 답변

2018-08-27 15:55:38 125.♡.♡.227

 채택 1

write_update.skin.php 파일은 글 등록 이후에 처리되는 파일입니다.

파일명을 write_update.head.skin.php 로 하세요.

댓글쓰기주소복사  스크랩0

 
↳  미미원
2018-08-27 17:51:27175.♡.♡.116

우와 잘되욤 ㅎㅎㅎ 감사합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

이렇게 한번 해보세요.

/skin/board/[스킨명]/write_update.skin.php

-->

<?php
if (!defined('_GNUBOARD_')) exit;

// 게시글 DB 저장 전에 실행되는 스킨 파일
// $wr_content를 파싱해서 유튜브 링크를 iframe으로 변환

function convert_youtube_to_iframe($content) {
    
    $pattern = '/__https?:\/\/(?:www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9_-]+)__/i';
    $replacement = '<div class="youtube_area"><iframe width="100%" height="100%" src="https://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></div>';
    
    $content = preg_replace($pattern, $replacement, $content);
    

    $pattern2 = '/__https?:\/\/youtu\.be\/([a-zA-Z0-9_-]+)__/i';
    $content = preg_replace($pattern2, $replacement, $content);
    
    return $content;
}


$wr_content = convert_youtube_to_iframe($wr_content);


?>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

선생님 감사하고 또 미안합니다. $wr_content로는 값이 전달되지 않습니다. 위의 함수를 없애고
if (!defined('_GNUBOARD_')) exit;
$wr_content ="sample"; 이것만 있는 write_update.skin.php를 작동시켜도 'sample' 이라는 내용이 등록되지 않고 write.skin.php 폼에디터에서 원래 작성한 글이 저장됩니다.
$wr_content 변수가 전달되지 않는 것 같아요. 방법이 없을까요?

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고