웹마스터 팁

글에서는 편리한 default 에디터를 사용하지만, 리플은 글처럼 다양한 입력이 필요하다고 생각하지 않아서 textarea 에디터를 사용했는데, 이게 편의기능만 빠졌을 뿐이지 실제로 html 태그 입력에는 전혀 제한이 없습니다.

따라서 리플에서 html 태그를 막기 위해, 예전에 올렸던 글(http://www.zeroboard.com/16798225)에 HNO3님께서 리플로 달아주신 방법을 사용중이었지만, 그게 언젠가부터 버전업 이후로 작동하지 않아서 사실상 포기했었습니다.

사이트에서 리플에 의도적으로 html 태그를 쓰는 경우는 별로 없었지만, 이모티콘을 쓸려고 >나 <가 들어가는 경우는 종종 있었는데(>,.<b 라던가), 그 경우 그 리플 아래에 표시되는 내용들의 레이아웃이 전부 다 아작나지요.

그런데 가만히 생각해보니 default 에디터에서는, >나 <가 &gt;나 &lt;로 알아서 변환이 되더군요. 그럼 default 에디터의 해당 부분을 textarea에 갖다 붙이기만 하면 문제가 해결되겠다는 감이 와서 한번 해봤습니다.

수정해야 할 파일은 zbxe/modules/editor/skins/textarea/js/xe_interface.js 입니다.


수정 전

function editorStartTextarea(editor_sequence, content_key, primary_key) {
    var obj = xGetElementById('editor_'+editor_sequence);
    obj.form.setAttribute('editor_sequence', editor_sequence);

    obj.style.width = '99%';

    editorRelKeys[editor_sequence] = new Array();
    editorRelKeys[editor_sequence]["primary"] = obj.form[primary_key];
    editorRelKeys[editor_sequence]["content"] = obj.form[content_key];
    editorRelKeys[editor_sequence]["func"] = editorGetContentTextarea;

    var content = obj.form[content_key].value;
    content = content.replace(/<br([^>]+)>/ig,"");
    obj.value = content;
}

function editorGetContentTextarea(editor_sequence) {
    var obj = xGetElementById('editor_'+editor_sequence);
    var content = obj.value.trim();
    content = content.replace(/(\r\n|\n)/g, "<br />$1");
    return content;
}


수정 후

function editorStartTextarea(editor_sequence, content_key, primary_key) {
    var obj = xGetElementById('editor_'+editor_sequence);
    obj.form.setAttribute('editor_sequence', editor_sequence);

    obj.style.width = '99%';

    editorRelKeys[editor_sequence] = new Array();
    editorRelKeys[editor_sequence]["primary"] = obj.form[primary_key];
    editorRelKeys[editor_sequence]["content"] = obj.form[content_key];
    editorRelKeys[editor_sequence]["func"] = editorGetContentTextarea;

    var content = obj.form[content_key].value;
    content = content.replace(/<br([^>]+)>/ig,"");
    content = content.replace(/&lt;/g, "<");
    content = content.replace(/&gt;/g, ">");
    content = content.replace(/&quot;/g, '"');
    content = content.replace(/&amp;/g, "&");
    obj.value = content;
}

function editorGetContentTextarea(editor_sequence) {
    var obj = xGetElementById('editor_'+editor_sequence);
    var content = obj.value.trim();
    content = content.replace(/&/g, "&amp;");
    content = content.replace(/</g, "&lt;");
    content = content.replace(/>/g, "&gt;");
    content = content.replace(/\"/g, "&quot;");
    content = content.replace(/(\r\n|\n)/g, "<br />$1");
    return content;
}

default 스킨의 해당 자바스크립트(zbxe/modules/editor/skins/default/js/xe_interface.js)를 보시면 아시겠지만 필요한 부분만 갖다 붙인 것입니다. defalut의 파일을 그대로 올리면 약간 차이가 나는 부분 때문에 스킨이 깨지더군요.

귀찮으신 분들은 그냥 zbxe/modules/editor/skins/textarea/js/xe_interface.js를 아래 파일로 대체하시면 됩니다. 
xe_interface.js

제목 글쓴이 날짜
회원 순위 공동순위 표시해서 뽑기(원리만 소개) 라르게덴 2009.02.13
주민등록번호 입력 폼 추가 (1.1.5 기준) [39] 개돌 2009.02.16
TortoiseSVN에서 특정 리비전 영역만 추출하기 [1] ◀CGlink▶ 2009.02.19
IIS에서 XE 설치 시 FTP 정보 등록에서 오류 조치 [4] impre 2009.02.20
플래너 최근문서(위젯)에 카테고리색 적용, Dday 적용, 지난 일정 출력 여부 조절 [7] file 주상태 2009.02.21
20메가 업로드 용량제한에 대한 이야기 ^^ [9] 만쓰별(정만) 2009.02.22
textarea 에디터를 사용하는 리플에서 태그 막기 [2] file 老姜君 2009.02.22
확장변수전용 권한설정 게시판스킨 미권한자에게 출력 (''깜박''오류?) 보고 file 0su 2009.02.25
테스트용 아이디 탈퇴 막기 [1] SMaker 2009.02.26
lighttpd 에서 XE rewrite 기능 (.htaccess) 사용하기 [2] msl2246 2009.02.28
첨부파일의 외부 무단 링크 차단하기(XE) 게시판설정 [7] file 왕초보왕따 2009.03.02
윈도우, 리눅스, 맥서버에서 이슈트래커 동작가능하게 하기 [1] file 뽀여니 2009.03.02
2003 + RWAPM + faceOff + IE7 = rewrite mod 에러 neotec 2009.03.03
Smarty 한글 메뉴얼 공개합니다. [1] 미니미 2009.03.04
이슈 트래커 소유자 변경 시 그룹별 선택 기능 file 개돌 2009.03.05
사진이 떳다 사라지는 문제 해결법 [2] 현진 2009.03.07
게시판 가로사이즈 줄이기....[초보만 클릭] [4] 유팔복 2009.03.07
svn 업으로 xe 최신본 유지하기 [2] file e~세상쉼터 2009.03.08
Faceoff 버젼에서 확장변수 마음대로 배치하기 ^^ 파파민 2009.03.13
게시물 가운데 정렬 문제 임시해결법 한신일 2009.03.15