code 블럭 안의 내용은 필터링되지 않게 하고 싶습니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
code 블럭 안의 내용은 필터링되지 않게 하고 싶습니다.

QA

code 블럭 안의 내용은 필터링되지 않게 하고 싶습니다.

본문

https://sir.kr/g5_plugin/7337

 

현재 마젠토님의 vditor를 그누보드에 테스트 중입니다.

 

마크다운의 위력을 눈으로 확인할 수 있어서 정말 좋습니다.

 

다만 코드 블럭의 내용이 htmlpurifier에게 필터링 되는 것이 가장 아쉬운 점입니다.

 

현재 SIR나 아미나에서는 코드블럭의 내용은 필터링되지 않고, 내용도 실행되지 않습니다.

 


<link rel="stylesheet" href="<?php echo G5_EDITOR_URL; ?>/vditor3/dist/index.css">
<script src="<?php echo G5_EDITOR_URL; ?>/vditor3/dist/index.min.js"></script>
<script src="<?php echo G5_EDITOR_URL; ?>/vditor3/editorOptions.js"></script>

 

위 내용의 경우 필터링되면 그냥 전부 없어져버립니다.

 

하지만 SIR나 아미나에서는 코드블럭 안에서 전부 살아있고, 파일을 불러오지도 않습니다.

 

코드블럭 안에 있는 경우 TEXT 같은 형태로 출력되게하면 문제가 해결될 것 같은데요.

 

도저히 감이오질 않아 헤매고 있습니다. ㅠㅠ

 

예시로

 

https://gnu.hubs.tk/bbs/board.php?bo_table=free&wr_id=2

 

위 게시판의 내용의 경우 밑에 댓글과 100% 같습니다.

 

댓글처럼 코드부분만! 텍스트형태로 치환되는게 제일 좋은 것 같은데요.. 어렵네요..

이 질문에 댓글 쓰기 :

답변 1


// [code]~[/code] 부분만 원래의 문자열을 유지하는 방법 문의인가요?
// 구현 방법이야 다양하겠으나, 옛날 옛적에 코드 하이라이트 구현한다고 작성했던 코드가 떠오르는군요.
// 방법은 굉장히 단순합니다. 간단하니까 예제 코드 참고로 추가합니다.
 
// 예를 들어 아래처럼 입력이 되었다고 가정 - 편의상 줄바꿈 생략, <code>~</code>로 표현
$html = '내용1<code>첫 번째 블록</code>내용2<code>두 번째 블록</code>내용3';

preg_match_all('#<code>.+?</code>#s', $html, $matches); // 정규식을 이용해 코드 블록 구하기
 
$change_a = []; // A->B 치환용
$change_b = []; // B->A 치환용
 
foreach ( $matches[0] as $k=>$v ) { // 블록 반복
    $key = '[CODE'.$k.']'; // 내용에 사용되지 않을 구분자 문자열 추천
    $change_a[$v] = $key;
    $change_b[$key] = $v;
}
 
// 본래의 내용에서 코드 블록 부분의 문자열을 먼저 치환
$html = strtr($html, $change_a); // 내용1[CODE0]내용2[CODE1]내용3 ... 이런 내용이 됩니다.
 
// HTML Purifier 를 적용해주고
// : 생략
// $html = $purifier->purify($html);
 
// 다시 코드 블록을 원래의 문자열로 치환
$html = strtr($html, $change_b); // 내용1<code>첫 번째 블록</code>내용2<code>두 번째 블록</code>내용3
 
// 어때요? 참 쉽죠?

주석 처리한 부분에 있어요.
1. 코드 블록 문자열 치환
2. HTML Purifier 적용
3. 코드 블록 원래대로 치환

찾아보니까 19년 전의 방법이네요.
그때는 정규식 안쓰고 문자열 처리한 것 같은데, 소스가 안보이네요. 하아...

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

회원로그인

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