code 블럭 안의 내용은 필터링되지 않게 하고 싶습니다. 채택완료
우성짱
5년 전
조회 2,374
https://sir.kr/g5_plugin/7337">https://sir.kr/g5_plugin/7337
현재 마젠토님의 vditor를 그누보드에 테스트 중입니다.
마크다운의 위력을 눈으로 확인할 수 있어서 정말 좋습니다.
다만 코드 블럭의 내용이 htmlpurifier에게 필터링 되는 것이 가장 아쉬운 점입니다.
현재 SIR나 아미나에서는 코드블럭의 내용은 필터링되지 않고, 내용도 실행되지 않습니다.
</p>
<p><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></p>
<p>
위 내용의 경우 필터링되면 그냥 전부 없어져버립니다.
하지만 SIR나 아미나에서는 코드블럭 안에서 전부 살아있고, 파일을 불러오지도 않습니다.
코드블럭 안에 있는 경우 TEXT 같은 형태로 출력되게하면 문제가 해결될 것 같은데요.
도저히 감이오질 않아 헤매고 있습니다. ㅠㅠ
예시로
https://gnu.hubs.tk/bbs/board.php?bo_table=free&wr_id=2">https://gnu.hubs.tk/bbs/board.php?bo_table=free&wr_id=2
위 게시판의 내용의 경우 밑에 댓글과 100% 같습니다.
댓글처럼 코드부분만! 텍스트형태로 치환되는게 제일 좋은 것 같은데요.. 어렵네요..
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
채택된 답변
+20 포인트
5년 전
</p>
<p>// [code]~[/code] 부분만 원래의 문자열을 유지하는 방법 문의인가요?</p>
<p>// 구현 방법이야 다양하겠으나, 옛날 옛적에 코드 하이라이트 구현한다고 작성했던 코드가 떠오르는군요.</p>
<p>// 방법은 굉장히 단순합니다. 간단하니까 예제 코드 참고로 추가합니다.</p>
<p> </p>
<p>// 예를 들어 아래처럼 입력이 되었다고 가정 - 편의상 줄바꿈 생략, <code>~</code>로 표현</p>
<p>$html = '내용1<code>첫 번째 블록</code>내용2<code>두 번째 블록</code>내용3';</p>
<p>
preg_match_all('#<code>.+?</code>#s', $html, $matches); // 정규식을 이용해 코드 블록 구하기</p>
<p> </p>
<p>$change_a = []; // A->B 치환용
$change_b = []; // B->A 치환용</p>
<p> </p>
<p>foreach ( $matches[0] as $k=>$v ) { // 블록 반복
$key = '[CODE'.$k.']'; // 내용에 사용되지 않을 구분자 문자열 추천
$change_a[$v] = $key;
$change_b[$key] = $v;
}</p>
<p> </p>
<p>// 본래의 내용에서 코드 블록 부분의 문자열을 먼저 치환</p>
<p>$html = strtr($html, $change_a); // 내용1[CODE0]내용2[CODE1]내용3 ... 이런 내용이 됩니다.</p>
<p> </p>
<p>// HTML Purifier 를 적용해주고</p>
<p>// : 생략
// $html = $purifier->purify($html);</p>
<p> </p>
<p>// 다시 코드 블록을 원래의 문자열로 치환</p>
<p>$html = strtr($html, $change_b); // 내용1<code>첫 번째 블록</code>내용2<code>두 번째 블록</code>내용3</p>
<p> </p>
<p>// 어때요? 참 쉽죠?</p>
<p>
로그인 후 평가할 수 있습니다
답변에 대한 댓글 5개
�
우성짱
5년 전
그럼 실제로 htmlpurifier 적용 코드는 어떻게 될까요? ㅜ ㅜ
B
BiHon
5년 전
주석 처리한 부분에 있어요.
1. 코드 블록 문자열 치환
2. HTML Purifier 적용
3. 코드 블록 원래대로 치환
찾아보니까 19년 전의 방법이네요.
그때는 정규식 안쓰고 문자열 처리한 것 같은데, 소스가 안보이네요. 하아...
1. 코드 블록 문자열 치환
2. HTML Purifier 적용
3. 코드 블록 원래대로 치환
찾아보니까 19년 전의 방법이네요.
그때는 정규식 안쓰고 문자열 처리한 것 같은데, 소스가 안보이네요. 하아...
�
우성짱
5년 전
그렇군요 ㅜ ㅜ 감사합니다.
B
BiHon
5년 전
답변한 코드로 '코드블록' 내 필터링 제외 가능한데요.
뭔가 부족한 부분이라도 있나요?
뭔가 부족한 부분이라도 있나요?
�
우성짱
5년 전
상세사항 추가해서 다시 문의올리겠습니다.
감사합니다.
감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인