스마트에디터 view페이지 연동 문의

스마트에디터 view페이지 연동 문의

QA

스마트에디터 view페이지 연동 문의

본문

스마트에디터의 view 부분 페이지에 wr_1을 노출하고자 합니다.

 

$html = 0 으로 설정시 html 태그도 나오며, 1 또는 2로 설정시 html태그는 purify 되어 나옵니다.

즉 wr_1에 "<p>wr1</p><p>wr1</p>" 가 저장되어 있을 시 

 

$html = 0 일 경우 "<p>wr1</p><p>wr1</p>" 나옴

$html = 1 일 경우 "wr1wr1" 나옴

 

html이 적용된 결과값이 "wr1 줄바꿈 wr1" 형태로 어떻게 하면 나오게 될까요?

 

view.php


<?php $view['wr_1'] = conv_content($view['wr_1'], $html); ?>

 

view.skin.php


<?php echo get_view_thumbnail($view['wr_1]); ?>

이 질문에 댓글 쓰기 :

답변 2

먼저

 

/bbs/view.php 에서

conv_content를 어떻게 사용했는지를 보시면

 


$view['content'] = conv_content($view['wr_content'], $html, $board['as_purifier'] ? false : true);

로 되어있습니다.

 

commonl.lib.php 파일에 있는 conv_content에 주석을 좀 달아보겠습니다.


// 내용을 변환하는 함수
// $content : 변환할 원본 내용
// $html    : HTML을 허용할지 여부 (0=텍스트, 1=HTML, 2=HTML + 자동 줄바꿈)
// $filter  : HTML Purifier 필터 적용 여부 (기본 true)
function conv_content($content, $html, $filter=true)
{
    // 환경설정($config)과 게시판 정보($board)를 전역에서 가져옴
    // conv_content는 게시판 출력 시 자주 사용되기 때문에 글로벌 변수를 공유함
    global $config, $board;
    // ---------------------------------------------------------------------
    // ? 1) HTML 모드일 때 (HTML 태그를 그대로 출력)
    // ---------------------------------------------------------------------
    if ($html)
    {
        $source = array(); // 치환할 패턴 목록
        $target = array(); // 치환 후 결과 목록
        // "//"를 제거하는 이유:
        // 일부 글에서 "//"가 있는 경우 주석처럼 취급되거나 깨질 수 있어 제거함
        $source[] = "//";
        $target[] = "";
        // html == 2 → 자동 줄바꿈 기능
        // 사용자가 엔터(\n)를 치면 <br> 태그로 바꿔 화면에서 줄바꿈이 보이도록 처리
        if ($html == 2) { 
            $source[] = "/\n/";
            $target[] = "<br/>";
        }
        // ---------------------------------------------------------------------
        // ? 1-1) <table> 태그 보정
        // HTML 작성 시 <table>은 있는데 </table>을 안 닫는 실수가 자주 발생
        // 브라우저가 테이블을 제대로 표시하지 못하기 때문에
        // <table> 개수와 </table> 개수를 비교해서 부족한 만큼 </table>를 자동으로 추가해줌
        // ---------------------------------------------------------------------
        $table_begin_count = substr_count(strtolower($content), "<table");
        $table_end_count   = substr_count(strtolower($content), "</table");
        // 닫는 태그 부족 시 자동 보정
        for ($i=$table_end_count; $i<$table_begin_count; $i++)
        {
            $content .= "</table>";
        }
        // 위에서 만든 $source → $target 치환 패턴으로 내용 변환
        $content = preg_replace($source, $target, $content);
        // HTML 필터링: 스크립트 공격(XSS) 방지를 위해 HTML Purifier 사용
        // $filter 값이 true일 때만 적용
        if($filter)
            $content = html_purifier($content);
    }
    // ---------------------------------------------------------------------
    // ? 2) 텍스트 모드일 때 (HTML 태그는 전부 제거하고 순수 텍스트만 출력)
    // ---------------------------------------------------------------------
    else
    {
        // HTML 엔티티 변환
        // 예: & → &   /     → ' ' 등
        // 텍스트 모드에서도 이런 특수문자들이 깨지지 않도록 처리
        $content = html_symbol($content);
        // ---------------------------------------------------------------------
        // ? 공백 처리
        // HTML에서 공백 두 개는 하나로 보이기 때문에  로 변환해줘야 시각적으로 유지됨
        // ---------------------------------------------------------------------
        // 연속 공백 두 개는   + 공백으로 치환
        $content = str_replace("  ", "  ", $content);
        // 줄바꿈 후 공백도 유지하기 위한 처리
        $content = str_replace("\n ", "\n ", $content);
        // get_text($content, 1)
        // HTML 태그를 모두 제거하고 특수문자도 깔끔히 정리하는 함수
        // 두 번째 파라미터 1은 'htmlspecialchars 처리(true)' 옵션
        $content = get_text($content, 1);
        // ---------------------------------------------------------------------
        // ? URL 자동 링크 변환
        // 예: "http://test.com" → <a href="http://test.com">http://test.com</a>
        // 텍스트 안에 URL이 있을 경우 자동으로 클릭 가능한 링크로 바꿔줌
        // ---------------------------------------------------------------------
        $content = url_auto_link($content);
    }
    // 변환된 내용을 반환
    return $content;
}

 

 

같은 패턴으로

wr_1도 적용하고 싶으시면

 


$view['content'] = conv_content($view['wr_content'], $html, $board['as_purifier'] ? false : true);
$view['wr_1']    = conv_content($view['wr_1'], $html, $board['as_purifier'] ? false : true);
 

로 해보세요

 

참고로 view.php 파일에 있는 내용입니다.

다른 파일에 적용할때는 그에 맞는 커스텀이 필요할겁니다.

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

회원로그인

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