Search Results for '전체 분류'


2064 posts related to '전체 분류'

  1. 2012/01/14 하이브리드 앱 개발툴 - 앱셀레이터 티타늄(Appcelerator Titanium)
  2. 2012/01/10 쉘상태에서 웹서버 접속자수 알아내기[2차 수정] 1
  3. 2012/01/02 브라우저가 최신기술 지원하는지 체크하는 방법
  4. 2012/01/02 HTML5/JS 소스공유 사이트
  5. 2012/01/02 웹뷰에서 폭 스크롤 때문에 잘리는 문제 해결 2
  6. 2012/01/02 php.ini 설정 권한이 없는 웹호스팅에서 register_globals = ON 설정 하기
  7. 2012/01/02 아이폰에서 프레임 적용시 100% 적용하기
  8. 2012/01/02 ASP 파일 경로 접근 에러(Path/File access error)
  9. 2012/01/02 자바스크립트를 이용해서 링크 클릭시 테이블 보이기 숨기기 style display 활용
  10. 2012/01/02 ASP 해킹 방지 보안 방법(injection, cross site scripting...)
  11. 2011/12/25 우분투 IP변경하기
  12. 2011/12/20 윈도우 7에 대한 파일 연결 수정 1
  13. 2011/12/10 웹표준 진단 프로그램(정식버전) - eGovFrame
  14. 2011/12/10 웹 접근성을 고려한 콘텐츠 제작 기법 2.0(2011.11)
  15. 2011/12/10 2011년도 적용 SW기술자 노임단가 공표
  16. 2011/12/06 레이어 공지사항(오늘 하루 그만 보기)
  17. 2011/12/06 셀렉트 박스 사이의 항목이동 및 순서변경
  18. 2011/12/06 JSON 객체를 String으로 변환하기
  19. 2011/12/06 다중 셀렉트 기본 방법
  20. 2011/12/06 모든 자바스크립트 에러 잠재우기 (에러 디버그)
  21. 2011/12/06 innerHTML 에서 script 태그 넣기
  22. 2011/12/06 문 자열 길이 체크
  23. 2011/12/06 정규 표현식(Regular Expression)
  24. 2011/12/06 자바스크립트 연습장
  25. 2011/12/06 자바스크립트로 엔터 넣기
  26. 2011/12/06 화면상의 객체 위치,크기 1
  27. 2011/12/06 모든 브라우저 버전별 확인 스크립트
  28. 2011/12/06 페이지 스크롤끝 확인 스크립트
  29. 2011/12/06 스마트폰 접속시 모바일 사이트로 이동 소스 예제
  30. 2011/12/06 구글음성 서비스 이용처리

직접 사용은 안해봤지만 추후에 사용할 것 같아서 대충 알아본 내용들을 토대로 올려봅니다.

하이브리드 앱 개발툴 : 웹 소스를 통해서 어떠한 플랫폼에 상관없이 연동되는 UI를 가지며 각 플랫폼 별로 지원이 필요한 기능(GPS,카메라, 등)은 각 플랫폼 내부의 API를 이용하여 개발을 도와주는 툴.

심비안, 블랙베리, 윈도우, 리눅스, 안드로이드, 아이폰, 바다 등등의 각종 플랫폼에서 구동되는 프로그램을 개발할려면 각 플랫폼별 언어 이해와 여러가지 UI 시도 등을 해야되는데 하이브리드 앱 개발툴을 이용하면 그것이 필요없다고 합니다. (위에서 말한 내용과 같은 내용이지만 조금 더 강조를 하기 위해서 추가하였습니다.)

앱셀레이터 티타늄 : http://www.appcelerator.com/

앱셀레이터 티타늄 스튜디오(개발툴) : http://titanium-studio.s3.amazonaws.com/latest/Titanium%20Studio.exe

2012/01/14 00:19 2012/01/14 00:19
netstat -n|grep -F :80|egrep '(ESTAB|SYN)'|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l

쉘상태에서 위와 같이 치시면 됩니다.

=2차 수정=
생각해보니
netstat -n|grep -F :80|egrep '(ESTAB|SYN)'|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l

보다는(레드햇 8.0 <- 이외에는 테스트 안해봄~)
netstat -np|grep -F httpd|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l
으로 좀더 정확한 수치를 뽑아낼 수 있습니다.

이제야 "웹서버와 통신하고있는 클라이언트 수 알아내기"가 완벽히 완성되었습니다.
=2차 수정 끝=
=수정 시작=
제가 생각을 해보니 명령어의 설명이 하나도 안들어갔군요.
netstat 은 네트워크의 상황을 나타내주는 유틸리티입니다.
옵션 -n은 재분석을 하지 않는옵션으로 빠른 결과출력 속도를 가져오죠.

grep는 정규표현식시 일치하는 줄만을 출력하는 쉘입니다.
-F옵션은 정규표현식을 사용하지 않겠다는 옵션이고.. ":80"은 netstat에서 ":80"을 포함한 줄만을 출력한다는 것이죠.. 즉. http프로토콜만을 출력하겠다는 것입니다.

egrep는 grep -E 와 같은 것으로 좀더 많은 정규표현식을 사용할 수 있습니다. 옵션은 '(ESTAB|SYN)' 으로 주었는데 이는 정규표현식으죠.. 정규표현식을 알고싶으시면 아래의 URL으로..
http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/x10468.html 을 참조하세요.

awk 는 각 줄에서 공백을 기준으로 필드로 나누며 '{print $5}'는 5번째 필드만을 출력하겠다는 것입니다.

sed 는 비대화형 줄단위 편집기입니다. 정규표현식을 사용하며 's/:[0-9]*//'옵션을 분리하면 s/// 안에 :[0-9]가 들어가있는 것으로 "s/이것//" 는 각 줄에서 "이것"이라는 글자만 지운다는 것으로 정규표현식 :[0-9] 을 나눠보면 ":" 으로 시작하는 모든 숫자를 나타냅니다.
([0-9]는 모든 숫자를 가리킴)

sort는 참 유용한 쉘입니다. 말 그대로 정렬한다는 것인데
printf "1\n5\n3\n"|sort 라고 쉘에서 처보면 순서대로 1,3,5로 출력되는것을 확인할 수 있습니다.
여기서. 옵션 -u는 출력 내용이 같은 것은 한번만 출력하는것입니다.

wc 이것 또한 참 유용한 쉘이죠 ~ 단어의 수를 알아내는 것으로 한줄에 한해서만 단어의 수를 샙니다. 이를 이용해서 몇줄이 나왔는지를 알수있는데 -ㅣ 옵션을 주면 몇줄이 출력되었는지만을 나타냅니다.

전체적으로 분석을 하면
netstat -n|grep -F :80|egrep '(ESTAB|SYN)'|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l
명령은 netstat유틸을 이용해서 네트워크의 상황을 출력하고 이 중에 grep 를 이용해 :80 문자만을 나타내고있는 줄만 출력하며 egrep를 이용해 ESTAB이나 SYN이있는 줄만 출력하며 awk를 이용해 접속하고있는 클라이언트만을 표시하며 sed를 이용해 클라이언트의 포트를 제거하고 sort를 이용해서 중복된 IP를 제거하고 마지막으로 숫자만을 출력하기위해 wc를 이용한것입니다
2012/01/10 19:38 2012/01/10 19:38

사용하려는 웹 기술이 브라우저에서 지원을 하는지 체크하고 싶으신가요?

Modernizr를 사용해보세요. 코드부터 보시겠습니다.

<!doctype html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>Canvas</title>

<script src="modernizr/modernizr-2.0.6.js"></script>

<script>

window.addEventListener("load", eventWindowLoaded, false);

function eventWindowLoaded() {

alert(Modernizr.canvas);

}

</script>

</head>

<body>

</body>

</html>

modernizr 라이브러리 포함 후 Modernizr.canvas를 호출하면 canvas 지원여부가 true로

표현됩니다.

공식사이트의 문서 중 http://www.modernizr.com/docs/#s2 이 문서를 읽으시면

다른 기능들의 지원여부를 확인할 때 어떤 것을 체크하면 되는지 찾으실 수 있습니다.

다른 예)

Modernizr.fontface

Modernizr.cssanimations

Modernizr.audio

Modernizr.indexeddb

Modernizr.websockets

Modernizr.svg

2012/01/02 13:25 2012/01/02 13:25

http://jsdo.it/

다양한 HTML5 예제 코드들을 보실 수 있습니다.

쉽게 쉽게 따라하셔서 HTML5 페이지들을 제작할 수 있겠죠?

일본도 많이 앞서가고 있네요.

2012/01/02 13:23 2012/01/02 13:23
요즘 웹앱 종종 작업하게 되는데요.
즉, 앱 안에 웹뷰로 모바일 웹을 띄우는 작업을 진행시 간혹 스크롤 때문에 웹표준과 충돌나서 흰여백이 생기는 경우가 있습니다.
한동안 스타일 문제로 알고 자료 계속 찾다가 알고 보니 웹뷰에서 스크롤만 false 처리하면 끝이더군요.
그렇다고 스크롤이 기능이 안되는건 아니구요 스크롤만 숨겨서 웹에서 폭이 모두 나오게끔 하는 겁니다.
Hide the scrollbar in Android
In Eclipse open DroidGap.java. Find the function public void onCreate(Bundle savedInstanceState). Look for the line that created the Android WebView:
appView = (WebView) findViewById(R.id.appView);
Beneath that, add these two lines:
appView.setVerticalScrollBarEnabled(false);
appView.setHorizontalScrollBarEnabled(false);
The scroll bars will no longer appear.
Since Phonegap v0.9.2 there is no need to change core DroidGap.java files.
Just change you main activity class ( the one that extends DroidGap):
public class MyApp extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();
// Disable scrollbars
super.appView.setVerticalScrollBarEnabled(false);
super.appView.setHorizontalScrollBarEnabled(false);
super.loadUrl("file:///android_asset/www/index.html");
}
}
2012/01/02 02:14 2012/01/02 02:14
웹호스팅 이용시 php.ini 설정을 제어하기가 어럽다.

예를들어 register_globals = OFF 값을 ON 으로 또는 OFF 로 설정하고 싶을 경우 호스팅 업체에 요청하면 들어주지 않는데, 이유는 설정을 변경시 모든 호스팅 이용자들에게 적용되어 버리기 때문에 얘기치 않은 장애가 발생하게 된다.

하지만, 홈페이지 root 경로에 보면 .htaccess 파일이 있을것이다.
없으면 추가해주면 된다.
수정은 그냥 메모장으로 하면된다.

파일에 다음과 같이 추가하면된다.

php_flag register_globals on

mysql utf8로 접근하고 싶을땐
PHP_VALUE mysql.default_charset UTF8

라고 추가해 주면 된다.
2012/01/02 02:12 2012/01/02 02:12
frameset 적용시 100% 되지 않는 문제는 meta 태그 한줄로 해결 됩니다.

<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, width=device-width" />
<frameset rows="*,49" frameborder="no" border="0" framespacing="0" style="border:0; width:320px;">
<frame src="/m/store/main.php" name="mainFrame" id="mainFrame" title="mainFrame" />
<frame src="/m/store/menu.php" name="bottomFrame" scrolling="No" noresize="noresize" id="bottomFrame" title="bottomFrame" />
</frameset>

<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, width=device-width" />

이부분을 추가 해주시면 됩니다.
2012/01/02 02:09 2012/01/02 02:09

제품 : DEXTUpload Pro 분류 : 컴포넌트 일반

[설명]
2.4x 버전과 Professional 3.0에서 DefaultPath프로퍼티 설정시 차이점이 있습니다.
[DEXTUpload 2.4x]
DefaultPath로 지정된 곳은 EveryOne 읽기, 쓰기, 수정 권한이 있어야 합니다. 그러나, 객체 생성후 DefaultPath를 지정 해주지 않으시면 C:\ 를 참조 하게 됩니다. C:\에 EveryOne 권한을 주시거나 또는 DefaultPath를 지정 해주시고 그곳에 권한을 주시면 됩니다.

[DEXTUpload Professional 3.0]
DefaultPath를 지정하지 않으면, 에러를 발생시키고 파일을 업로드 시키지 않습니다.
따라서, 명시적으로 DefaultPath를 지정해야 합니다.
DEXTUpload Professional에서는 DefaultPath를 지정한 폴더가 존재하지 않을시 AutoMakeFolder를 True로 지정함으로써, 자동 폴더 생성을 지원 합니다.

본 문서의 정보는 다음의 제품에 적용됩니다.
DEXTUpload Professional 3.0
DEXTUpload 2.4x
DEXTUpload 2.0x

2012/01/02 02:08 2012/01/02 02:08

고객센터 질문과답변 페이지를 보여 줄때 답변 내용이 길게 나올 경우 페이지가 쭉 늘어나 정작 필요한 답변을 찾기가 쉽지가 않습니다.
이럴때 답변은 숨겨 놓고 질문 제목을 클릭하면 답변이 보이며 좀전 열었던 답변은 숨기는 기능을 자바스크립트와 style display을 이용해서 적용해 보겠습니다.

1. 자바스크립트 소스

<script language="javascript">
<!--
function QnaShow(qna) {

document.all.qna1.style.display = "none";
document.all.qna2.style.display = "none";
document.all.qna3.style.display = "none";

var obj = eval("document.all." + qna);
obj.style.display = "block";
}
//-->
</script>

2. 테이블 소스

<table>
<!-- 질문 1 -->
<tr>
<td><a href="javascript:QnaShow('qna1')">질문1</a></td>
</tr>
<tr id="qna1" style="display:none;">
<td>답변1</td>
</tr>
<!-- 질문 2 -->
<tr>
<td><a href="javascript:QnaShow('qna2')">질문2</a></td>
</tr>
<tr id="qna2" style="display:none;">
<td>답변2</td>
</tr>
<!-- 질문 3 -->
<tr>
<td><a href="javascript:QnaShow('qna3')">질문3</a></td>
</tr>
<tr id="qna3" style="display:none;">
<td>답변3</td>
</tr>
</table>

3. 소스 설명 :
제목을 클릭시 자바스크립트 QnaShow() 함수를 호출합니다.
이때 함께 전달한 qna 값으로 어떤 질문을 클릭했는지 구분합니다.
먼저 모든 질문을 숨기기 처리합니다.
1번 질문을 본뒤에 2번 질문을 클릭시 1번 질문을 숨기고 2번 질문의 답변을 보여주기 위한 처리인데 일괄적으로 모든 질문의 답변을 숨긴뒤에 원하는 답변만 보여주는 처리 입니다.
열려있는 질문만 숨기기 코딩하면 좋겠지만 오히려 소스가 복잡해줄수 있으므로 질문추가시 자바스크립트 항목중 document.all.qna3.style.display = "none"; 이부분도 함께 추가해 줍니다.
숨기기 처리가 끝나면 var obj = eval("document.all." + qna); 에서 obj로 클릭한 질문의 답변 <tr> id값을 조합합니다.
그리고, obj.style.display = "block"; 에서 지정한 <tr> style의 display 값을 block 으로 적용해서 보이도록 합니다.
이와같은 적용으로 페이지를 다시 접속하지 않고도 보이기 또는 숨기기 적용이 됩니다.

2012/01/02 02:07 2012/01/02 02:07
<%
'////////////////////////////////////////////////////////////////////
'//가. 명령어 삽입(Command Injection) 가능성
'////////////////////////////////////////////////////////////////////
Dim title, str
title = "What's Up!!! <what happen> Oh my god!!!! & goodness"
str = ""
//변환을 수행할 함수
Sub ReplaceStr(content, byref str)
content = replace(content, "'", """)
content = replace(content, "&", "&")
content = replace(content, "<", "<")
content = replace(content, ">", ">")

str = content
End Sub

ReplaceStr title, str
response.write str

%>

'////////////////////////////////////////////////////////////////////
'//나. 크로스 사이트 스크립팅 (XSS) 가능성
'////////////////////////////////////////////////////////////////////
/include/config.inc.asp
<%
atag = "p,br" 'XSS 허용할 태그 리스트
UploadedPath = "/Uploaded_Files/" '업로드 기본 경로
fileext = "jpg,gif,png,pcx" '허용할 확장자 리스트
%>


/include/secure.inc.asp
<%
'공격 위험성이 존재하는 문자들을 필터링
'문자열 입력값을 검증
'숫자형은 데이터 타입을 별도로 체크하도록 한다.
Function sqlFilter(search)
Dim strSearch(5), strReplace(5), cnt, data

'SQL Injection 특수문자 필터링
'필수 필터링 문자 리스트
strSearch(0)="'"
strSearch(1)=""""
strSearch(2)="\"
strSearch(3)=null
strSearch(4)="#"
strSearch(5)="--"
strSearch(6)=";"

'변환될 필터 문자
strReplace(0)="''"
strReplace(1)=""""""
strReplace(2)="\\"
strReplace(3)="\"&null
strReplace(4)="\#"
strReplace(5)="\--"
strReplace(6)="\;"

data = search
For cnt = 0 to 6 '필터링 인덱스를 배열 크기와 맞춰준다.
data = replace(data, LCASE(strSearch(cnt)), strReplace(cnt))
Next

sqlFilter = data
End Function

'XSS 출력 필터 함수
'XSS 필터 함수
'$str - 필터링할 출력값
'$avatag - 허용할 태그 리스트 예) $avatag = "p,br"
Function clearXSS(strString, avatag)
'XSS 필터링
strString = replace(strString, "<", "<")
strString = replace(strString, "\0", "")

'허용할 태그 변환
avatag = replace(avatag, " ", "") '공백 제거
If (avatag <> "") Then
taglist = split(avatag, ",")

for each p in taglist
strString = replace(strString, "<"&p&" ", "<"&p&" ", 1, -1, 1)
strString = replace(strString, "<"&p&">", "<"&p&">", 1, -1, 1)
strString = replace(strString, "</"&p&" ", "</"&p&" ", 1, -1, 1)
next
End If

clearXSS = strString
End Function

'확장자 검사
'$filename: 파일명
'$avaext: 허용할 확장자 예) $avaext = "jpg,gif,pdf"
'리턴값: true-"ok", false-"error"
Function Check_Ext(filename,avaext)
Dim bad_file, FileStartName, FileEndName

If instr(filename, "\0") Then
Response.Write "허용하지 않는 입력값"
Response.End
End If

'업로드 금지 확장자 체크
bad_file = "asp,html,htm,asa,hta"

filename = Replace(filename, " ", "")
filename = Replace(filename, "%", "")

FileStartName = Left(filename,InstrRev(filename,".")-1)
FileEndName = Mid(filename, InstrRev(filename, ".")+1)

bad_file = split(bad_file, ",")

for each p in bad_file
if instr(FileEndName, p)>0 then
Check_Ext = "error"
Exit Function
end if
next

'허용할 확장자 체크
if avaext <> "" Then
ok_file = split(avaext, ",")

for each p in ok_file
if instr(FileEndName, p)>0 then
Check_Ext = "ok"
Exit Function
End If
next
End If

Check_Ext = "error"
End Function

'다운로드 경로 체크 함수
'$dn_dir - 다운로드 디렉토리 경로(path)
'$fname - 다운로드 파일명
'리턴 - true:파운로드 파일 경로, false: "error"
Function Check_Path(dn_dir, fname)
'디렉토리 구분자를 하나로 통일
dn_dir = Replace(dn_dir, "/", "\")
fname = Replace(fname, "/", "\")

strFile = Server.MapPath(dn_dir) & "\" & fname '서버 절대경로

strFname = Mid(fname,InstrRev(fname,"\")+1) '파일 이름 추출, ..\ 등의 하위 경로 탐색은 제거 됨
Response.Write strFname

strFPath = Server.MapPath(dn_dir) & "\" & strFname '웹서버의 파일 다운로드 절대 경로

If strFPath = strFile Then
Check_Path = strFile '정상일 경우 파일 경로 리턴
Else
Check_Path = "error"
End If
End Function

'IP 체크 함수
Function Check_IP(IP_Addr)
If Request.Servervariables("REMOTE_ADDR") = IP_Addr Then
Check_IP = "TRUE"
Else
Check_IP = "FALSE"
End If
End Function
%>



/head.asp
<%
'페이지에서 에러가 발생하여도 페이지 오류를 외부로 출력하지 않기위해 사용
On Error Resume Next
'On Error GoTo 0도 가능하나 2003에서는 실행되지 않음
if err.number <> 0 then
'Response.Write err.description & "<BR>" & err.source & "<BR>"
err.clear
End if
%>


/content.asp
<!--#include virtual="/include/connection.inc.asp"--> <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"--> <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"--> <% '전역변수리스트 %>
<!--#include virtual="/head.asp"--> <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim strSQL
Dim intSeq, strName, strEmail, strSubject, strContent, intCount, dtmReg_Date, intExist
Dim blnTag, strUserIP
Dim atag

'입력값이 숫자형인 경우 IsNumeric 함수를 사용한다.
If IsNumeric(seq) Then
intSeq = Request.QueryString("seq")
Else
Response.Write "허용하지 않는 입력값입니다."
Reponse.End
End If

'문자(열)인 경우 sqlfilter 사용
'intSeq = sqlFilter(Request.QueryString("seq")) 'SQL Injection 필터링

'읽은 횟수 검색
strSQL = "SELECT count(*) FROM board WHERE intSeq='" & intSeq & "'"

objRs.Open strSQL, objDBConn

intExist = objRs(0)
objRs.Close

If intExist <> 1 Then
Response.Write "해당글이 없습니다."
Else
'읽은 횟수 증가
strSQL = "UPDATE board SET intCount=intCount+1 WHERE intSeq='" & intSeq & "'"
objRs.Open strSQL, objDBConn

'게시물 SELECTZ
strSQL = "SELECT strName,strEmail,strSubject,strContent,intCount,strUserIP,blnTag,dtmReg_Date FROM board WHERE intSeq='" & intSeq & "'"
objRs.Open strSQL, objDBConn

strName = objRs(0)
strEmail = objRs(1)
strSubject = objRs(2)
strContent = objRs(3)
intCount = objRs(4)
strUserIP = objRs(5)
blnTag = objRs(6)
dtmReg_Date = objRs(7)

objRs.Close
Set objRs = Nothing

objDBConn.Close
Set objDBConn = Nothing

'게시물 출력값에 XSS 필터링
'사용자가 입력하는 출력되는 값은 strName, strEmail, strSubject, strContent으로 이 부분은 XSS 공격이 가능한 부분들이다.
'일반적으로 본문만 선택적으로 HTML 태그 사용을 허용하며 나머지 부분들은 사용할 수 없도록 하는것이 바람직하다.
strName = clearXSS(strName, atag)
strEmail = clearXSS(strEmail, atag)
strSubject = clearXSS(strSubject, atag)
strContent = clearXSS(strContent, atag)

'줄넘김 처리
strContent = replace(strContent, vbLf, vbLf & "<br>")
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
<title>내용보기</title>
</head>

<body>
<div align=center>
<table border=1>
<tr>
<td>이름</td>
<td><%=strName%></td>
<td>등록일</td>
<td><%=dtmReg_Date%></td>
</tr>
<tr>
<td>이메일</td>
<td><%=strEmail%></td>
<td>조회</td>
<td><%=intCount%></td>
</tr>
<tr>
<td>제목</td>
<td colspan=3><%=strSubject%></td>
</tr>
<tr>
<td>내용</td>
<td colspan=3><%=strContent%></td>
</tr>
<tr>
<td colspan=4>
<a href="list.asp">목록으로</a> <a href="edit.asp?seq=<%=intSeq%>">수정하기</a> <a href="delete.asp?seq=<%=intSeq%>">삭제하기</a>
</td>
</tr>
</table>

</div>
</body>
</html>
<%
End If
%>



'////////////////////////////////////////////////////////////////////
'//다. SQL 구문 삽입 가능성
'////////////////////////////////////////////////////////////////////
SQL Injection은 쿼리문의 잘못 해석함에서 발생하는 문제이다. 이를 해결하기 위해서는 쿼리문을 생성시에 입력된 값에 대한 유효성 검사를 수행하면 된다. ‘, “ 문자를 \’, \”로 변경해 주거나 아예 공백으로 처리하는 방법이다.

삭제해야 할 프로시저
xp_cmdshell
xp_stratmail
xp_sendmail
xp_grantlogin
xp_makewebtask


'////////////////////////////////////////////////////////////////////
'//사. 다운로드 취약성
'////////////////////////////////////////////////////////////////////
<!--#include virtual="/include/connection.inc.asp"--> <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"--> <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"--> <% '전역변수리스트 %>
<!--#include virtual="/head.asp"--> <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim dn_dir, fname, val_ok
Dim UploadedPath

dn_dir = Request("dir")
fname = Request("fname") '파일 이름

' IE 5.01에서는 이 방식을 사용할때 메모리 관련 문제가 발생할 수 있다.
strUA = Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strUA, "MSIE") Then
intVersion = CDbl(mid(strUA, Instr(strUA, "MSIE")+5, 3))

If intVersion < 5.01 Then
Response.Write "error"
End If
End If

if fname = "" Then
Response.Write "<script language=javascript>"
Response.Write "alert(""파일명을 입력해 주세요"");"
Response.Write "history.back();"
Response.Write "</script>"
End If

dn_dir = UploadedPath & dn_dir
val_ok = Check_Path(dn_dir, fname)

If val_ok <> "error" Then '사용자가 다운 받는 파일과 웹서버의 파일 다운로드 경로가 맞는지 비교
Set objStream = Server.CreateObject("ADODB.Stream") 'Stream 이용

Response.ContentType = "application/unknown" 'ContentType 선언
Response.AddHeader "Content-Disposition","attachment; filename=" & fname

objStream.Open
objStream.Type = 1
objStream.LoadFromFile val_ok

download = objStream.Read
Response.BinaryWrite download
End If

Set objstream = nothing '객체 초기화
%>
2012/01/02 02:04 2012/01/02 02:04

우분투가 데비안 커널을 사용하는것인지 서버설정이며 기본명령어가 대부분 데비안과 비슷하다. ㅡ.,ㅡ;
이제껏 사용했던 빨간모자-레뎃(redhat)의 네트웍 설정은 아무런 도움이 되지 못했다.

초기 설치시 DHCP를 사용하게 되어있던 항목을 고정아이피로 바꿔주기 위해서 구글신을 빌었다.
설정은 아래와 같이 하면된다.

우선 서버콘솔박스 앞에서 작업한다면 (리모트로 작업한다면 ifdown하는 동시에 터미널접속이 끊어지므로 주의)

ifdown eth0

로 네트웍카드를 잠시 멈춘후 아래 내용을 etc/network/interfaces에 설정한다.

auto lo
iface lo inet
loopback

auto eth0
iface eth0 inet static
address 192.168.10.136
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
gateway 192.168.10.1
dns-nameservers 168.126.63.1 168.126.63.2
위와 같이 설정후
ifup eth0
으로 네트웍을 설정한다.
리모트로 작업한다면 위의 ifdown이나 ifup을 사용하지 말고

sudo /etc/init.d/networking restart
으로 네트웍을 다시 시작하는것이 좋다.
2011/12/25 19:38 2011/12/25 19:38
이 페이지는 일반적인 파일 형식 중 일부에 대한 파일 연결 수정 프로그램이 포함되어 있습니다.

These fixes are applicable for Windows® 7 systems only.
이러한 수정 프로그램 ® 7 시스템은

Windows에 대해 적용됩니다.

2011/12/20 09:42 2011/12/20 09:42
개요

eGovFrame에서는 한국정보화진흥원(NIA)에서 제공하는 웹표준 진단 프로그램을 사용 할 수 있는 방법을 제공한다.

설명
웹표준 진단 프로그램은 웹사이트의 웹표준(HTML, CSS)준수 여부를 진단하고 웹표준 문법 오류를 유형별로 구분하여 웹개발자 및 콘텐츠 제작사가 웹사이트를 지속적으로 관리하고 개선 할 수 있도록 도와주는 프로그램이다.
웹표준 진단 프로그램의 상세한 기능 및 사용 방법 및 설치 방법 및 이슈사항은 한국정보화진흥원(http://www.nia.or.kr) 홈페이지 또는 한국정보화진흥원에서 제공하는 웹표준 진단 프로그램 가이드를 참고한다.



2011/12/10 08:59 2011/12/10 08:59
한국형 웹 콘텐츠 접근성 지침 2.0(KICS.OT-10.0003/R1, 2010년 12월 31일 제정)을 기준으로 작성한 웹 접근성을 고려한 콘텐츠 제작 기법 2.0 입니다.


[목 차]

Ⅰ. 웹 접근성의 이해 | 11

Ⅱ. 웹 접근성을 고려한 콘텐츠 제작기법 | 29
원칙 1. 인식의 용이성(Perceivable): 모든 콘텐츠는 사용자가 인식할 수 있어야 한다. | 29
검사항목 1.1.1 (적절한 대체 텍스트 제공) 텍스트 아닌 콘텐츠는 그 의미나 용도를 이해할 수 있도록 대체 텍스트를 제공해야 한다. | 31
검사항목 1.2.1 (자막 제공) 멀티미디어 콘텐츠에는 자막, 원고 또는 수화를 제공해야 한다. | 55
검사항목 1.3.1 (색에 무관한 콘텐츠 인식) 콘텐츠는 색에 관계없이 인식될 수 있어야 한다. | 62
검사항목 1.3.2 (명확한 지시사항 제공) 지시사항은 모양, 크기, 위치, 방향, 색, 소리 등에 관계없이 인식될 수 있어야 한다. | 70
검사항목 1.3.3 (텍스트 콘텐츠의 명도 대비) 텍스트 콘텐츠와 배경 간의 명도 대비는 4.5대 1 이상이어야 한다. | 77
검사항목 1.3.4 (배경음 사용 금지) 자동으로 재생되는 배경음을 사용하지 않아야 한다. | 83
원칙 2. 운용의 용이성(Operable): 사용자 인터페이스 구성요소는 조작 가능하고 내비게이션 할 수 있어야 한다. | 93
검사항목 2.1.1 (키보드 사용 보장) 모든 기능은 키보드만으로도 사용할 수 있어야 한다. | 106
검사항목 2.1.2 (초점 이동) 키보드에 의한 초점은 논리적으로 이동해야 하며 시각적으로 구별할 수 있어야 한다. | 115
검사항목 2.2.1 (응답시간 조절) 시간제한이 있는 콘텐츠는 응답시간을 조절할 수 있어야 한다. | 115
검사항목 2.2.2 (정지 기능 제공) 자동으로 변경되는 콘텐츠는 움직임을 제어할 수 있어야 한다. | 119
검사항목 2.3.1 (깜빡임과 번쩍임 사용 제한) 초당 3~50회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않아야 한다. | 123
검사항목 2.4.1 (반복 영역 건너뛰기) 콘텐츠의 반복되는 영역은 건너뛸 수 있어야 한다. | 128
검사항목 2.4.2 (제목 제공) 페이지, 프레임, 콘텐츠 블록에는 적절한 제목을 제공해야 한다. | 133
검사항목 2.4.3 (적절한 링크 텍스트) 링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다. | 137
원칙 3. 이해의 용이성(Understandable): 콘텐츠는 이해할 수 있어야 한다. | 140
검사항목 3.1.1 (기본 언어 표시) 주로 사용하는 언어를 명시해야 한다. | 142
검사항목 3.2.1 (사용자 요구에 따른 실행) 사용자가 의도하지 않은 기능(새 창, 초점 변화 등)은 실행되지 않아야 한다. | 145
검사항목 3.3.1 (콘텐츠의 선형화) 콘텐츠는 논리적인 순서로 제공해야 한다. | 154
검사항목 3.3.2 (표의 구성) 표는 이해하기 쉽게 구성해야 한다. | 165
검사항목 3.4.1 (레이블 제공) 입력 서식에는 대응하는 레이블을 제공해야 한다. | 174
검사항목 3.4.2 (오류 정정) 입력 오류를 정정할 수 있는 방법을 제공해야 한다. | 183
원칙 4. 견고성(Robust): 웹 콘텐츠는 미래의 기술로도 접근할 수 있도록 견고하게 만들어야 한다. | 201
검사항목 4.1.1 (마크업 오류 방지) 마크업 언어의 요소는 열고 닫음, 중첩 관계 및 속성 선언에 오류가 없어야 한다. | 202
검사항목 4.2.1 (웹 애플리케이션 접근성 준수) 콘텐츠에 포함된 웹 애플리케이션은 접근성이 있어야 한다. | 209


[적용 기술 목차]

적용 기술 1) 이미지 등에 대한 대체 텍스트 제공 | 31
적용 기술 2) 버튼 이미지에 대한 대체 텍스트 제공 | 32
적용 기술 3) Java 애플릿 등에 대한 대체 텍스트 제공 | 32
적용 기술 4) 이미지 맵에 대한 대체 텍스트 제공 | 35
적용 기술 5) 텍스트 이미지, 그래픽 문자 등에 대한 대체 텍스트 제공 | 35
적용 기술 6) 플래시 콘텐츠의 대체 텍스트 제공 | 37
적용 기술 7) 실버라이트 콘텐츠의 대체 텍스트 제공 | 38
적용 기술 8) 그래프 등에 대한 설명문 제공 | 39
적용 기술 9) 생방송 콘텐츠에 대한 대체 텍스트 제공 | 40
적용 기술 10) CAPTCHA에 대한 대체 텍스트 제공 | 41
적용 기술 11) 온라인 시험 등에 대한 대체 텍스트 제공 | 42
적용 기술 12) 대체 텍스트를 빈 공간(alt="")이나 생략해서 제공해야 하는 경우 · 42
적용 기술 13) 열린 자막 제공 | 55
적용 기술 14) 닫힌 자막 제공 | 56
적용 기술 15) 대본 또는 원고 제공 | 56
적용 기술 16) 수화 제공 | 57
적용 기술 17) 음성이 없는 동영상의 대체 수단 제공 | 57
적용 기술 18) 색을 보완하는 텍스트 제공 | 62
적용 기술 19) 색을 보완하기 위하여 글자모양을 이용하는 방법 | 63
적용 기술 20) 색을 보완하기 위하여 무늬 또는 모양을 이용하는 방법 | 64
적용 기술 21) 시각 정보를 이용한 지시문의 보완 | 70
적용 기술 22) 청각 정보를 이용한 지시문의 보완 | 71
적용 기술 23) 배경과 텍스트 콘텐츠의 색 지정 방법 | 77
적용 기술 24) 배경과 텍스트 콘텐츠 색을 기본 값으로 지정하는 방법 | 78
적용 기술 25) 배경과 텍스트 콘텐츠 색을 변경하는 컨트롤의 제공 | 78
적용 기술 26) 재생 시간이 3초 미만인 배경음의 사용 | 83
적용 기술 27) 배경음을 정지 상태로 제공하는 방법 | 84
적용 기술 28) 플래시 콘텐츠의 배경음 자동 실행 방지 | 84
적용 기술 29) 실버라이트 콘텐츠의 배경음 자동 실행 방지 | 89
적용 기술 30) 키보드와 마우스 이벤트 핸들러 제공 | 95
적용 기술 31) 마우스 드래그와 드롭 기능에서의 키보드 이용 보장 | 97
적용 기술 32) 웹 애플리케이션 제공 시 키보드 이용 보장 | 98
적용 기술 33) 실버라이트 플러그인의 키보드 접근 제공 | 101
적용 기술 34) 콘텐츠 화면 순서와 동일한 키보드 내비게이션 순서 제공 | 106
적용 기술 35) 시각적으로 표시 가능한 초점 표시 방법 | 107
적용 기술 36) 플래시에서 키보드 내비게이션 순서 제공 방법 | 110
적용 기술 37) 실버라이트에서 키보드 내비게이션 순서 제공 방법 | 111
적용 기술 38) 제한 시간 연장 방법 제공 | 115
적용 기술 39) 메타 태그를 이용한 페이지 재 이동 방법 제공 | 116
적용 기술 40) 변화하는 콘텐츠를 일시정지 시키고, 일시정지 된 곳으로부터 다시 시작할 수 있도록 제공 | 119
적용 기술 41) 전체 배너를 보여줄 수 있는 방법 제공 | 120
적용 기술 42) 전체 배너의 리스트 제공 | 120
적용 기술 43) 사용자 요구에 의한 업데이트 방법 제공 | 120
적용 기술 44) 깜빡이는 시간이 3초 이내인 콘텐츠만 제공 | 124
적용 기술 45) 경고 페이지 제공 | 125
적용 기술 46) 반복적인 콘텐츠 영역의 시작 부분에 건너뛰기 링크 제공 | 128
적용 기술 47) 건너뛰기 링크의 화면 표시 | 129
적용 기술 48) 웹 페이지의 제목 제공 | 133
적용 기술 49) 콘텐츠 블록의 제목 제공 | 134
적용 기술 50) 프레임 제목 제공 | 134
적용 기술 51) 링크의 목적을 설명하는 링크 텍스트 제공 | 137
적용 기술 52) <html> 태그에 주 사용 언어 지정 | 142
적용 기술 53) 초점 변화에 의해 맥락을 변화시키지 말고, 해당 인터페이스가 활성화(activate)되었을 때 기능을 실행 | 145
적용 기술 54) 명확한 서식 제출(submit) 버튼 제공 | 146
적용 기술 55) 새 창 열림을 사전에 알림 | 146
적용 기술 56) 콘텐츠를 의미 있는 순서로 배열 | 154
적용 기술 57) 스타일을 이용한 글자 간격 조절 | 157
적용 기술 58) 동적으로 생성된 요소는 그것을 유발시킨 요소 바로 뒤에 위치 | 158
적용 기술 59) 표 제목을 <caption>으로 제공 | 165
적용 기술 60) 표의 구조 또는 내용에 대한 요약을 summary로 제공 | 166
적용 기술 61) 표의 헤더 셀과 데이터 셀의 관계 정의 | 167
적용 기술 62) 입력 서식과 <label>의 명시적 관계 제공 | 174
적용 기술 63) <label>을 제공할 수 없는 입력 서식에 title 제공 | 176
적용 기술 64) 여러 개의 유사한 입력 서식 묶기 | 178
적용 기술 65) 입력 값 또는 형식에 대한 예시 제공 | 183
적용 기술 66) 서버측 오류 검사 | 184
적용 기술 67) 클라이언트측 적합성 검사와 본문에 오류 메시지 표시 | 185
적용 기술 68) 오류 메시지를 스크립트 경고창으로 제공 | 194
적용 기술 69) 중요한 서식 제출 시 재확인 절차 제공 | 197
적용 기술 70) 여는 태그와 닫는 태그의 정확한 사용 | 202
적용 기술 71) 속성 이름과 속성 값의 정확한 사용 | 203
적용 기술 72) 태그의 정확한 중첩관계 | 204
적용 기술 73) 표준에 부합하는 태그와 속성 이름, 값 사용 | 205
적용 기술 74) 플러그인 플랫폼이 제공하는 접근성 API 활용 | 209
적용 기술 75) 웹 애플리케이션의 대체 콘텐츠 제공 | 210
적용 기술 76) 용도, 목적지, 종류, 사용법에 맞는 사용자 인터페이스 요소 사용 · 212


[잘못된 사례 목차]

잘못된 사례 1) 의미나 기능이 있는 텍스트 아닌 콘텐츠에 빈 문자열을 대체 텍스트로 제공 | 45
잘못된 사례 2) 복잡한 정보를 하나의 이미지로 표현하고 간단한 대체 텍스트로만 제공 | 47
잘못된 사례 3) 주기적으로 변하는 콘텐츠의 대체 텍스트를 변경하지 않는 경우 | 48
잘못된 사례 4) 의미 있는 정보를 배경 이미지로 제공 | 48
잘못된 사례 5) 빈칸 이미지의 대체 텍스트가 콘텐츠의 인식을 방해하는 경우 | 50
잘못된 사례 6) 도와 같은 텍스트 아닌 콘텐츠에 대한 설명이 불충분한 경우 | 51
잘못된 사례 7) 중요한 정보를 색으로만 제공하는 경우 | 51
잘못된 사례 8) alt 속성이 아닌 title 속성을 이용하여 대체 텍스트 제공 | 52
잘못된 사례 9) QR 코드에서 URL을 대체 텍스트로 알려주지 않는 경우 | 53
잘못된 사례 10) 자막, 원고, 수화 중 어느 한 가지도 제공하지 않는 경우 | 58
잘못된 사례 11) 동영상의 내용을 요약하여 제공하는 자막 또는 원고의 경우 | 59
잘못된 사례 12) 대체 수단에 대한 또 다른 대체 수단임을 알려주지 않는 경우 | 60
잘못된 사례 13) 열린 자막이 수화를 가리는 동영상 | 61
잘못된 사례 14) 동영상의 해상도가 낮아 수화를 볼 수 없는 경우 | 61
잘못된 사례 15) CSS로 인하여 링크임이 구분되지 않는 경우 | 65
잘못된 사례 16) 색으로만 필수 입력 항목을 표시한 경우 | 66
잘못된 사례 17) 오류 메시지를 색으로만 구분하도록 한 경우 | 67
잘못된 사례 18) 그래프를 색으로만 인식하도록 하는 경우 | 68
잘못된 사례 19) 일정 구분을 색으로만 구분하도록 한 경우 | 69
잘못된 사례 20) 방향, 위치 정보만을 이용하여 사용법을 알려주도록 구현한 경우 | 72
잘못된 사례 21) 화면 위치만을 이용하여 객체를 지정한 경우 | 74
잘못된 사례 22) 버튼 모양만을 이용하여 사용법을 알려준 경우 | 74
잘못된 사례 23) 특수 기호만을 이용하여 사용법을 알려준 경우 | 76
잘못된 사례 24) 전경색은 기본 값으로 두고 배경색만을 지정한 경우 | 79
잘못된 사례 25) 배경색은 기본 값으로 두고 전경색만을 지정하는 경우 | 80
잘못된 사례 26) 배경음이 3초 이상 지속되도록 구현한 경우 | 91
잘못된 사례 27) 마우스 오버 또는 키보드 초점을 받으면 자동적으로 배경음이 실행되는 경우 | 92
잘못된 사례 28) 마우스로만 접근 가능한 이미지 버튼을 제공하는 경우 | 101
잘못된 사례 29) 키보드로 접근할 수 없는 플래시 메뉴 | 102
잘못된 사례 30) 마우스로만 접근할 수 있는 링크를 제공한 경우 | 103
잘못된 사례 31) 키보드만으로 이전 입력 서식 이동이 불가능한 경우 | 105
잘못된 사례 32) 초점을 일부러 보이지 않도록 한 경우 | 112
잘못된 사례 33) 키보드 이동순서가 비논리적인 경우 | 113
잘못된 사례 34) 페이지 재 이동 시 회피 수단을 제공하지 않는 경우 | 116
잘못된 사례 35) 마우스로만 정지할 수 있는 콘텐츠를 제공한 경우 | 121
잘못된 사례 36) 자동으로 변하는 배너 | 122
잘못된 사례 37) 깜빡이는 콘텐츠가 많은 경우 | 125
잘못된 사례 38) 발작 가능성이 있는 동영상을 제공한 경우 | 126
잘못된 사례 39) 번쩍임이 지속되는 영상을 제공한 경우 | 127
잘못된 사례 40) 건너뛰기 링크를 제공하지 않은 경우 | 130
잘못된 사례 41) 건너뛰기 링크를 과도하게 제공한 경우 | 131
잘못된 사례 42) 콘텐츠가 다른 페이지에 동일한 제목을 제공한 경우 | 135
잘못된 사례 43) 프레임 제목이 누락된 경우 | 135
잘못된 사례 44) 특수문자(▩▩▩▩)기호를 제공한 경우 | 136
잘못된 사례 45) 목적이나 용도를 알기 어려운 링크 텍스트 | 138
잘못된 사례 46) 목록 선택 상자에서 초점 변경만으로 새 창이 열리는 경우 | 148
잘못된 사례 47) 체크 상자의 선택만으로 페이지가 다시 로드되는 경우 | 150
잘못된 사례 48) 텍스트 입력 서식에 값을 넣으면 자동으로 제출되는 경우 | 151
잘못된 사례 49) 페이지가 로드될 때 자동으로 팝업 창이 열리도록 한 경우 | 152
잘못된 사례 50) 상위 메뉴와 하위 메뉴의 읽는 순서가 잘못된 경우 | 160
잘못된 사례 51) 배치용 표를 잘못 사용한 경우 | 162
잘못된 사례 52) 표를 이미지로 표현하고, 표 제목을 제공하지 않은 경우 | 170
잘못된 사례 53) 이메일 입력 서식의 레이블을 잘못 제공한 경우 | 180
잘못된 사례 54) 오류 정보를 확인한 후 오류 발생 페이지로 돌아가지 못하는 경우 · 199
잘못된 사례 55) 아이디를 중복 선언한 경우 | 206
잘못된 사례 56) 태그의 중첩관계에 오류가 있는 경우 | 207
잘못된 사례 57) 이미지 링크를 자바스크립트로 잘못 구현한 경우 | 214
잘못된 사례 58) 잘못된 이미지 버튼 구현 사례 | 214


출처 : 한국정보화진흥원 | 원문자료

2011/12/10 08:50 2011/12/10 08:50

소프트웨어산업진흥법 시행령 제16조(SW기술자의 등급별 노임단가)의 규정에 의한 소프트웨어사업의 대가기준에 적용할 소프트웨어기술자 일 노임단가를 통계법 제23조에 의거 다음과 같이 공표합니다.

【2011년 공표임금: 일 급여 기준】

(단위: 명,원)

구 분

2011년
조사인원

노임단가

전년대비
증가액

2009년도

2010년도

2011년도

기술사

313

356,999

358,777

369,995

11,218

특급기술자

9,736

314,773

333,226

340,973

7,747

고급기술자

8,266

228,833

239,085

251,772

12,687

중급기술자

10,305

190,248

188,139

208,943

20,804

초급기술자

14,932

141,761

146,620

162,862

16,242

고급기능사

420

126,106

140,918

138,613

-2,305

중급기능사

640

109,777

110,637

107,288

-3,349

초급기능사

530

86,961

90,599

93,127

2,528

자료입력원

758

67,032

69,680

76,887

7,207

* 본 2011년 노임단가는 인원가중평균치임.
* 상기결과는 일급여기준이며, 기본급여+제수당+상여금 등을 모두 포함한 결과임.
* 자료입력원 노임단가의 기본급여는 2010년 58,795원, 2011년 65,685원으로 조사됨.
* 2011년의 월평균 근무일수는 21.5일로 조사됨.
* SW기술자 공인노임단가는 2010년 대비 평균 5.5% 증가함.
<시행일> 2011년 9월 1일부터

2011년 8월 31일
한국소프트웨어산업협회장

2011/12/10 08:48 2011/12/10 08:48
<SCRIPT language=javascript>
var banner_count = 1;
var cur_banner = 1;
var timeout_id;

function all_banner_clear() {
var banner_id = "";
for( var i=1; i<= banner_count; i++) {
banner_id = 'all_banner_'+ i;
document.all[banner_id].style.visibility='hidden';
}
clearTimeout(timeout_id);
}

function all_banner_change() {
var next_banner = cur_banner+1;
var banner_id = "";
if( next_banner > banner_count ) {
next_banner = 1;
}
banner_id = 'all_banner_'+ cur_banner;
document.all[banner_id].style.visibility='hidden';
banner_id = 'all_banner_'+ next_banner;
document.all[banner_id].style.visibility='visible';

cur_banner = next_banner;
timeout_id = window.setTimeout("all_banner_change()",4000);
}

function all_banner_open() {
if (screen.width==800) {
var w_left = 0;
} else {
var w_left = (screen.width)?(screen.width-600)/2:100;
}
var banner_id = "";
for(var i = 1; i<= banner_count; i++ ) {
banner_id = 'all_banner_' + i;
document.all[banner_id].style.left=w_left;
}
if (getCookie("all_banner_img") == null) {
document.all['all_banner_1'].style.visibility='visible';
selectbox_hidden(all_banner_1);
//timeout_id = window.setTimeout("all_banner_change()",4000);
} else {
document.all['all_banner_1'].style.visibility='hidden';
selectbox_visible();
}
}

function all_banner_cookie() {
if (document.all.cookie_check.checked == true) {
setCookie("all_banner_img", "true", 1);
}
document.all['all_banner_1'].style.visibility = "hidden";
clearTimeout(timeout_id);
}

function getCookie(Name) {
var search = Name + "="
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
End = document.cookie.indexOf(";", offset)
if (End == -1)
End = document.cookie.length
return unescape(document.cookie.substring(offset, End))
}
}
}

function setCookie(name, value, expiredays) {
var todayDate = new Date();
todayDate.setDate( todayDate.getDate() + expiredays );
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}

function selectbox_hidden(layer_id) {
var ly = eval(layer_id);

// 레이어 좌표
var ly_left = ly.offsetLeft;
var ly_top = ly.offsetTop;
var ly_right = ly.offsetLeft + ly.offsetWidth;
var ly_bottom = ly.offsetTop + ly.offsetHeight;

// 셀렉트박스의 좌표
var el;

for (i=0; i<document.forms.length; i++) {
for (k=0; k<document.forms[i].length; k++) {
el = document.forms[i].elements[k];
if (el.type == "select-one") {
var el_left = el_top = 0;
var obj = el;
if (obj.offsetParent) {
while (obj.offsetParent) {
el_left += obj.offsetLeft;
el_top += obj.offsetTop;
obj = obj.offsetParent;
}
}
el_left += el.clientLeft;
el_top += el.clientTop;
el_right = el_left + el.clientWidth;
el_bottom = el_top + el.clientHeight;

// 좌표를 따져 레이어가 셀렉트 박스를 침범했으면 셀렉트 박스를 hidden 시킴
if ((ly_right >= el_left && ly_left <= el_right) && (ly_bottom >= el_top && ly_top <= el_bottom))
el.style.visibility = 'hidden';
}
}
}
}

// 감추어진 셀렉트 박스를 모두 보이게 함
function selectbox_visible() {
for (i=0; i<document.forms.length; i++) {
for (k=0; k<document.forms[i].length; k++) {
el = document.forms[i].elements[k];
if (el.type == "select-one" && el.style.visibility == 'hidden')
el.style.visibility = 'visible';
}
}
}
</SCRIPT>


<DIV id=all_banner_1 style="Z-INDEX: 8; LEFT: 400px; VISIBILITY: hidden; POSITION: absolute; TOP: 278px">
<IFRAME style="Z-INDEX: -1; ; LEFT: expression(this.nextSibling.offsetLeft); ;
WIDTH: expression(this.nextSibling.offsetWidth); POSITION: absolute; ;
TOP: expression(this.nextSibling.offsetTop); ; HEIGHT: expression(this.nextSibling.offsetHeight)"
src="about:blank" frameBorder=0></IFRAME>

<TABLE cellSpacing=0 cellPadding=0 width=400 bgColor=#ffffff border=0>
<TR>
<TD align=middle height=10></TD>
</TR>
<TR>
<TD height=5></TD>
</TR>
<TR>
<TD style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px" height=15>
<TABLE cellSpacing=1 cellPadding=0 width="100%" bgColor=#d0d0d0 border=0>
<TR>
<TD>
<TABLE cellSpacing=5 cellPadding=0 width="100%" bgColor=#e7e7e7 border=0>
<TR>
<TD bgColor=#ffffff>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TR>
<TD height=10></TD>
</TR>
<TR>
<TD align=middle height=10>
<TABLE cellSpacing=0 cellPadding=0 width="95%" border=0>
<TR>
<TD width=10>>></TD>
<TD style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; PADDING-TOP: 2px; LETTER-SPACING: -0.1em">알려드립니다.!!!</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD style="PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; PADDING-TOP: 15px" height=10>
공지사항입니다.공지사항입니다.공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.<br />
공지사항입니다.
</TD>
</TR>
<TR>
<TD height=5></TD>
</TR>
</TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TR>
<TD width="3%" bgColor=#f7f7f7 height=30></TD>
<TD width="6%" bgColor=#f7f7f7><INPUT type=checkbox name=cookie_check></TD>
<TD width="36%" bgColor=#f7f7f7>오늘 하루 그만 보기 </TD>
<TD style="PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px" align=right width="55%" bgColor=#f7f7f7>
<A onfocus=this.blur(); href="javascript:all_banner_cookie();">:: 닫기 ::</A>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD align=middle height=10></TD>
</TR>
</TABLE>
</DIV>
<SCRIPT>
all_banner_open();
</SCRIPT>
2011/12/06 11:42 2011/12/06 11:42
<HTML>
<HEAD>
<META http-equiv = "Content-Type" content = "text/html;charset=utf-8" />
<TITLE>셀렉트 박스 항목 이동</TITLE>
<SCRIPT language = "JavaScript">
/**
* 셀렉트 박스에 아이템 추가
*
* @param name 겉으로 보일 텍스트 값
* @param text 실제 값
* @param formName 셀렉트 박스명
*/
function insertItem( text, value, formName )
{
var opt = document.getElementsByName( formName )[0];

var newOpt = document.createElement("OPTION");
newOpt.setAttribute( "value", value );
        newOpt.appendChild( document.createTextNode( text ) );

opt.appendChild( newOpt );

return false;
}

/**
* 항목 삭제
*
* @param formName 셀렉트 박스명
*/
function deleteItem( formName )
{
var sel = document.getElementsByName( formName )[0];

if( sel.selectedIndex < 0 )
{
alert("삭제할 아이템을 선택하여 주십시오.");
return;
}

while( true )
{
if( sel.selectedIndex != -1 )
sel.remove( sel.selectedIndex );
else
break;
}
}

/**
* 위치 이동
*
* @param type U(위), D(아래), T(맨위), B(맨아래) 의 위치 이동 키
* @param formName 셀렉트 박스명
*/
function moveItem( type, formName )
{
var sel = document.getElementsByName( formName )[0];

var index = sel.selectedIndex;

if( type == "U" )
{
if( index > 0 )
{
swap( sel, index, index - 1 );
}
}
else if( type == "D" )
{
if( index < sel.options.length-1 )
{
swap( sel, index, index + 1 );
}
}
else if( type == "T" )
{
for( var i = index; i > 0; i-- )
{
swap( sel, i, i - 1 );
}
}
else if( type == "B" )
{
for( var i = index; i < sel.options.length - 1; i++ )
{
swap( sel, i, i + 1 );
}
}
}

/**
* 실제 데이터 교체를 담당
*
* @param selectedOption 셀렉트 박스
* @param index 현재 위치
* @param targetIndex 이동 위치
*/
function swap( selectedOption, index, targetIndex )
{
var onetext = selectedOption.options[targetIndex].text;
var onevalue = selectedOption.options[targetIndex].value;

selectedOption.options[targetIndex].text  = selectedOption.options[index].text;
selectedOption.options[targetIndex].value = selectedOption.options[index].value;
selectedOption.options[index].text = onetext;
selectedOption.options[index].value = onevalue;
selectedOption.options.selectedIndex = targetIndex;

selectedOption.options[targetIndex].selected = true;
}

/**
* 지정한 위치로 데이터를 이동 시킴
*
* @param fromFormName 본 항목을 포함하는 폼명
* @param toFormName 이동할 폼명
*/
function moveAnotherForm( fromFormName, toFormName )
{
var from = document.getElementsByName( fromFormName )[0];
var to = document.getElementsByName( toFormName )[0];

// 다중 선택시 이동을 위함
while( true )
{
if( from.selectedIndex != -1 )
{
// 이동할 항목의 데이터를 추출하여
var text = from.options[ from.selectedIndex ].text;
var value = from.options[ from.selectedIndex ].value;

// 이동될 위치에 새로 삽입한 후
insertItem( text, value, toFormName );

// 기존 항목은 삭제함
from.remove( from.selectedIndex );
}
else
{
break;
}
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name = "form" method = "post">
<TABLE width = "100%">
<TR>
<TD align = "center">
<TABLE width = "800">
<TR>
<TD width = "350" align = "center" bgcolor = "#f0f0f0" nowrap valign = "top">
<TABLE width = "100%">
<TR>
<TD colspan = "2" align = "center">좌측 항목</TD>
</TR>
<TR>
<TD width = "250" align = "center">
<SELECT multiple name = "left_item" style = "width:280px;height:180px">
<OPTION value = "1">A</OPTION>
<OPTION value = "2">B</OPTION>
<OPTION value = "3">C</OPTION>
<OPTION value = "4">D</OPTION>
</SELECT>
</TD>
<TD width = "100" align = "center">
<A href = "javascript:moveItem( 'T', 'left_item' );">맨위</A><BR><BR>
<A href = "javascript:moveItem( 'U', 'left_item' );">위</A><BR><BR>
<A href = "javascript:moveItem( 'D', 'left_item' );">아래</A><BR><BR>
<A href = "javascript:moveItem( 'B', 'left_item' );">맨아래</A>
</TD>
</TR>
<TR>
<TD colspan = "2" align = "center"><A href = "javascript:deleteItem('left_item')">삭제</A></TD>
</TR>
</TABLE>
</TD>
<TD width = "100">
<A href = "#" onClick = "moveAnotherForm( 'right_item', 'left_item' )"><-</A>
<A href = "#" onClick = "moveAnotherForm( 'left_item', 'right_item' )">-></A>
</TD>
<TD width = "350" align = "center" bgcolor = "#f0f0f0" nowrap valign = "top">
<TABLE width = "100%">
<TR>
<TD colspan = "2" align = "center">우측 항목</TD>
</TR>
<TR>
<TD width = "250" align = "center">
<SELECT multiple name = "right_item" style = "width:280px;height:180px">
<OPTION value = "1">A</OPTION>
<OPTION value = "2">B</OPTION>
<OPTION value = "3">C</OPTION>
<OPTION value = "4">D</OPTION>
</SELECT>
</TD>
<TD width = "100" align = "center">
<A href = "javascript:moveItem( 'T', 'right_item' );">맨위</A><BR><BR>
<A href = "javascript:moveItem( 'U', 'right_item' );">위</A><BR><BR>
<A href = "javascript:moveItem( 'D', 'right_item' );">아래</A><BR><BR>
<A href = "javascript:moveItem( 'B', 'right_item' );">맨아래</A>
</TD>
</TR>
<TR>
<TD colspan = "2" align = "center"><A href = "javascript:deleteItem('right_item')">삭제</A></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR height = "50">
<TD colspan = "3" align = "center">
<INPUT type = "button" value = "저장" onClick = "save()">
</TD>
</TR>
</TABLE>
<SELECT name = "form_name">
<OPTION value = "left_item">좌측으로</OPTION>
<OPTION value = "right_item">우측으로</OPTION>
</SELECT>
<INPUT type = "text" name = "txt">
<INPUT type = "button" onClick = "return insertItem( form.txt.value, form.txt.value, form.form_name.value )" value = "들어가랏">
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
2011/12/06 11:41 2011/12/06 11:41
function JSONtoString(object) {
var results = [];
for (var property in object) {
var value = object[property];
if (value)
results.push(property.toString() + ': ' + value);
}
return '{' + results.join(', ') + '}';
}
var obj = { "id":"outsider", "sex":"male" };
obj = JSONtoString(obj);
alert(obj); // {id: outsider, sex: male}
alert(typeof obj); // string

만일 prototype.js 를 쓴다면
alert(Object.toJSON(obj)); // {id: outsider, sex: male}
2011/12/06 11:40 2011/12/06 11:40
다중 셀렉트는 자주 사용되는 것이다.
간단히 동작 방법을 알아보자. 아래 방법을 가지고 응용하면 된다.

첫번째.
배열을 읽어와 보여 주는 방법이다. 가장 많이 사용하는 방법으로 데이타가 고정 적일때 사용한다.
배열을 따로 JS 파일을 만들어 읽어 오는 것이 좋다.
만일 배열 데이타가 수시로 바뀐다면 매번 JS 파일을 만들어 주어야 하기 때문에 여간 불편 한것이 아니다.
<form name=pubform method=post action=''>
<select name=selectName onChange="selectSecond(this.selectedIndex-1);">
<option value=''>1차 고르시오</option>
<option value='1'>1</option>
<option value='2'>2</option>
</select>
<select name=secondOption>
<option value=''>2차</option>
</select>
</form>

<script language="javascript">
function selectSecond(n) {
fs = document.pubform.secondOption;
if(n==-1) {
fs.selectedIndex = 0;
return;
} else {
for(j=0;j<arrSecondText[n].length;j++) {
fs.options[j]=new Option(arrSecondText[n][j],arrSecondValue[n][j]);
}
fs.length=arrSecondText[n].length;
}
}

arrSecondText = new Array(2);
arrSecondValue = new Array(2);

arrSecondText[0] = new Array(6);
arrSecondValue[0] = new Array(6);

arrSecondText[0][0] = "선택";
arrSecondValue[0][0] = "";
arrSecondText[0][1] = "옵션11";
arrSecondValue[0][1] = "11";
arrSecondText[0][2] = "옵션12";
arrSecondValue[0][2] = "12";
arrSecondText[0][3] = "옵션13";
arrSecondValue[0][3] = "13";
arrSecondText[0][4] = "옵션14";
arrSecondValue[0][4] = "14";
arrSecondText[0][5] = "옵션15";
arrSecondValue[0][5] = "15";

arrSecondText[1] = new Array(6);
arrSecondValue[1] = new Array(6);

arrSecondText[1][0] = "선택";
arrSecondValue[1][0] = "";
arrSecondText[1][1] = "옵션21";
arrSecondValue[1][1] = "21";
arrSecondText[1][2] = "옵션22";
arrSecondValue[1][2] = "22";
arrSecondText[1][3] = "옵션23";
arrSecondValue[1][3] = "13";
arrSecondText[1][4] = "옵션24";
arrSecondValue[1][4] = "24";
arrSecondText[1][5] = "옵션25";
arrSecondValue[1][5] = "25";
</script>

두번째.

아래 방법도 유용하다. 서버 스크립트로 요청된 셀렉트 값을 즉시 만들어 주는 방법이다.

위 방법보다는 느리지만 자주 바뀌는 데이타라면 아래 방법이 유용하다.

<form name=pubform method=post action=''>
<select name=selectName onChange="selectSecond();">
<option value=''>1차 고르시오</option>
<option value='1'>1</option>
</select>
<select name=secondOption>
<option value=''>2차</option>
</select>
</form>

<script id="selectOption"></script>
<script language="javascript">
function selectSecond() {
selectOption.src = "optionSelect.php";
}
</script>
2011/12/06 11:40 2011/12/06 11:40
별로 권장하지는 않지만 익스플러로에
자바스크립트 에러 표시가 걸리시는 분들은 아래 스크립트를 하단에 삽입하여 보십시오.

모든 에러메시지가 출력 되지 않습니다.

window.onerror = ErrorSetting
var e_msg="";
var e_file="";
var e_line="";
function ErrorSetting(msg, file_loc, line_no) {
e_msg=msg;
e_file=file_loc;
e_line=line_no;
return true;
}

* 자바스크립트 에러 디버그

var isDebugging = true;
function ErrorSetting(msg, file_loc, line_no) {
var e_msg=msg;
var e_file=file_loc;
var e_line=line_no;
var error_d = "Error in file: " + file_loc +
"\nline number:" + line_no +
"\nMessage:" + msg;
if(isDebugging)
alert("Error Found !!!\n--------------\n"+error_d);

return true;
}
window.onerror = ErrorSetting;

조금더 확장해서 ajax로 에러 기록 할 경우

var isDebugging = false;
var logJsErrors = true;
function ErrorSetting(msg, file_loc, line_no) {
var e_msg=msg;
var e_file=file_loc;
var e_line=line_no;
var error_d = "Error in file: " + file_loc +"\nline number:"
+ line_no +
"\nMessage:" + msg;

if(logJsErrors){
theData = "file="+file_loc+"&line="+line_no+"&err="+msg;
ajaxCtrl(
function(){
return true;
},"ajxerrorLogger.php",theData
);
}

if(isDebugging)
alert("Error Found !!!\n--------------\n"+error_d);

return true;
}
window.onerror = ErrorSetting;
2011/12/06 11:40 2011/12/06 11:40
innerHTML 아래와 같이 script 태그를 넣으면 에러가 생기는 것을 볼수 있습니다.
Act.innerHTML = "<scripttype='text/javascript'>document.write('yesyo.com')</script>";

nnerHTML의 문자열에 script 가 들어 가서 문제가 생깁니다.
이것을 아래와 같이 수정하면 문제가 해결됩니다.


Act.innerHTML = "<scr" + "ipt type='text/javascript'>document.write('yesyo.com')</scr" + "ipt>";
2011/12/06 11:39 2011/12/06 11:39
lwGetByte 는 문자열의 바이트수를 출력해줍니다.
lwTrimByte 는 문자열을 원하는 수만큼 잘라줍니다.

사 용방법은 다음과 같습니다.
a = lwGetByte(str)
b = lwTrimByte(str, 400)

function lwGetByte(s) {

var ls_str = s;
var li_str_len = ls_str.length;

var i = 0;
var li_byte = 0;
var ls_one_char = "";
var ls_str2 = "";

for(i=0; i< li_str_len; i++) {
ls_one_char = ls_str.charAt(i);

if (escape(ls_one_char).length > 4) {
li_byte += 2;
} else {
li_byte++;
}

}

return li_byte;
}

function lwTrimByte(s, nMaxByte) {

var ls_str = s;
var li_str_len = ls_str.length;

var li_max = nMaxByte;
var i = 0;
var li_len = 0;
var li_byte = 0;
var ls_one_char = "";
var ls_str2 = "";

for(i=0; i< li_str_len; i++) {
ls_one_char = ls_str.charAt(i);

if (escape(ls_one_char).length > 4) {
li_byte += 2;
} else {
li_byte++;
}
if(li_byte <= li_max) {
li_len = i + 1;
}
if(li_byte > li_max) {
ls_str2 = ls_str.substr(0, li_len);
return ls_str2;
}
}
}

/*
' ------------------------------------------------------------------
' Function : fc_chk2()
' Description : Enter키를 못치게한다.
' Argument :
' Return :
' ------------------------------------------------------------------
*/
function fc_chk2()
{
if(event.keyCode == 13)
event.returnValue=false;
}
</script>

< textarea name="txt_aaa" rows="5" cols="60" onkeyup="fc_chk_byte(this,10);" onkeypress="fc_chk2()" >      
2011/12/06 11:39 2011/12/06 11:39

1. 정규 표현식이란.

문자열의 특정한 패턴을 표시하거나 검사하기 위한 규칙을 의미하며 어떤 문자열의 집합을 표시하는 텍스트 string이나 일반적인

텍스트 형시의 문서 등에서 문자열을 찾아내거나 검사하고 치환하는데 사용된다. 이러한 정규 표현식은 정규 표현식을 표시하는

특수문자와 정규 표현식을 검사하기 위한 함수가 있다.

2. 패턴을 표현하는 특수 문자

특수 문자

내용

해당문자열

.

임의의 한 글자를 의미한다.

a.b (abc, acb, afb...)

*

* 바로 앞의 문자가 없거나 한개 이상이 있을 경우

a*b (b, ab, aab, aaab...)

+

+ 바로 앞의 문자가 최소 한 개 이상일 때

a+b (ab, aab, aaab...)

?

? 바로 앞의 문자가 없거나 한 개 존재하는 경우

a?b (b, ab, cb, zb...)

^

^ 뒤에 문자열과 같은 문자열로 시작한는 경우

[] 안에서 ^ 는 [] 안의 문자를 제외한 문자를 의미한다.

^ab (ab, abc, abdr...)

$

$ 앞의 문자열과 같은 문자열로 끝나는 경우

ab$ (ab, sab, aaab...)

[]

[] 안의 문자열 중에 하나만의 문자만을 의미한다.

[a-z], [0-9], [a-zA-Z]

{}

{} 앞의 문자열의 개수를 의미한다.

a{1-3}b (ab, aab, aaab)

()

() 안의 문자는 그룹으로 인식한다.

a(bc){2} (abcbc)

|

or 연산자이다.

a(b|c)d (abd, acd)

[[:alpha:]]

모든 알파벳의 문자 한 자를 의미한다.

[a-zA-Z]와 동일

[[:digit:]]

모든 숫자 한 자를 의미한다.

[0-9]와 동일

[[:alnum:]]

알파벳과 숫자중 한 자를 의미한다.

[a-zA-Z0-9]와 동일

[[:space:]]

공백 문자를 의미한다.

[[:punct:]]

구두점을 의미

\

. * + ? ^ $ [] {} () | \ 문자를 표시할때

(\*, \\, \[1\], \|...)

3. 정규 표현식의 특수문자 사용법

1) ^a?bc : a로 시작해서 bc로 끝나는 문자(abc로 시작하는 문자)와 bc로 시작하는 모든 문자 (예 abcd, bcd)

2) ^.a : a앞에 아무 한 문자가 있어야 하고 그 문자로 시작하고 a가 들어간 문자 (예 aa, bacd, match, para)

3) a?b$ : b로 끝나는 문자열 중에 a가 없거나 한 개 이상 존재하는 문자열 (예 b, ab, aab)

4) a?b+$ : 첫 글자는 a가 있거나 없고 b가 한 개 이상이고 b로 끝나는 문자 (예 ab, b, bb, abbb, abbbb)

5) ^ab$ : 첫 글자가 a이고 끝나는 문자가 b인 경우 (예 ab)

6) [ab]cd : a나 b중에 한 글자와 cd가 포함된 acd, bcd를 포함한 문자 (예 acd, bcd, acdse)

7) ^[a-zA-Z] : 영문자로 시작하는 모든 문자 (예 a, b, c, d, ee)

8) [^ab]cd : cd 문자열 앞에 a나 b를 제외한 문자가 있는 문자열 즉, acd와 bcd를 제외한 문자열을 의미한다. (예 scd, dcd, ffcd)

9) a{2,}b : a의 개수가 최소 2개 이상이고 다음 문자가 b인 문자 (예 aab, aaabcd, aaaab)

-------------------------------------------------------------------------------------------------------------------------------------------------

정규표현식 기초

. : 다수의 한문자

? : 0개 이상의 한문자

* : 0개 이상의 문자 또는 문자열

+ : 1개 이상의 문자 또는 문자열

(chars) : (, ) 안의 문자또는 문자열을 그룹으로 묶습니다. 이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수 있습니니다.

^ : 문자열의 첫문(열)을 지정합니다.

$ : 문자열의 끝 문자(열)을 지정합니다.

\(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등)

{n} : 정확히 n번 반복

{n,} : n번 이상 반복

{n,m} : n 이상 m 이하 반복

[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T

정규표현식 단축표현들

[:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현

[:alnum:] : 알파벳과 숫자. [a-zA-Z0-9] 와 같은 표현

[:digit:] : 숫자 [0-9] 와 같은 표현

[:upper:] : 대문자. [A-Z] 와 같은 표현


-------------------------------------------------------------------------------------------------------------------------------------------------

PHP는 POSIX와 Perl이라는 두 가지 스타일의 정규 표현식을 지원한다. POSIX스타일의 정규 표현식이 PHP에서 기본이지만,

Perl 스타일도 PCRE(Perl-Compitable Regular Expression)라이브러리를 사용하여 표현할수 있다.

아래의 설명은 POSIX 스타일을 기준으로 한다.


. : 문자는 줄바꿈 문자(\n)을 제외한 모든 문자를 대신할수 있다 (하나의 문자)

ex) .at : 이런 정규식은 cat, sat, mat등이 해당된다.

[a-z]at : []의 문자들은 문자 클래스라고 하고, 일치시키는 문자는 이 클래스에 속해야 한다. []안의 것들은

모두 각각 하나의 문자이다.

ex) [aeiou] : 영어의 모음에 해당되는 단어로 []안의 하나의 문자가 된다.

또한 범위를 사용해서도 표현할수 있는데 -를 사용한다.

ex) [a-zA-Z] : 대소문자 알파벳 한 문자를 의미한다.

집합의 구성원이 아니라는 표현으로 ^를 사용한다. 이는 []안에 ^가 있을경우 not이라는 의미를 가진다.

ex) [^a-z] : 소문자 알파벳 이외의 한 문자를 의미한다.


[[:alnum:]] 알파벳 문자, 숫자

[[:alpha:]] 알파벳

[[:lower:]] 소문자

[[:upper:]] 대문자

[[:digit:]] 십진법의 숫자

[[:xdigit:]] 16진법의 숫자

[[:punct:]] 구두점

[[:blank:]] 탭, 스페이스

[[:space:]] 공백 문자들

[[:cntrl:]] 컨트롤 문자들

[[:print:]] 모든 출력 가능한 문자들

[[:graph:]] 스페이스를 제외한 모든 출력 가능한 문자들


* : 패턴이 0번 이상 반복될 수 있음을 나타내고l

+ : 한번이상 반복될 수 있음을 나타낸다.

ex) [[:alnum:]]+ : 알파벳이나 숫자 한문자가 한번이상 반복. 즉, 적어도 하나이상의 알파벳이나 숫자를 의미한다.

한 문자열 뒤에 어떤 문자열이 반복해서 나타남을 정규 표현식으로 나타낸 것은 아래와 같다.
ex) (very )*large : 이는 large, very large, very very large등과 일치한다.

{}를 통해서 반복되는 횟수를 제한할 수 있다.
{3}는 세번 반복, {2, 4}은 두번에서 네번 사이로 반복, {2, }는 적어도 2번 이상 반복의 의미이다.
ex) (very ){1, 3} : very , very very , very very very 와 일치한다.

^ : 정규 표현식의 시작부분에 사용되며, 검색하는 문자열의 맨 앞부분에 이 표현이 있어야 함을 의미한다.
$ : 정규 표현식의 뒷부분에 사용되고 이 표현으로 문자열이 끝나야 됨을 의미한다.미
^[a-z]$ : a부터 z사이의 한문자를 의미한다.

| : 선택을 표현하는 경우 사용된다.
ex) com|edu|net : com이거나 edu이거나 net인경우를 의미한다.

\ : '.', '{', '$', '-', 등의 특수문자를 정규 표현식을 위한 특수문자가 아닌 문자로 사용하고 싶을때 '\'를 붙여서 사용한다.
'\'를 표현할때는 '\\'라고 써준다.
ex) \\\$ : 이 경우 \$를 찾고자 할경우를 의미하게 된다.

POSIX 정규 표현식에서의 특수문자의 의미
1) []밖에서 사용되었을때
- / : 특수문자 이스케이프
- ^ : 문자열의 처음에서 일치되어야 함
- $ : 문자열의 끝에서 일치되어야 함
- . : 줄바꿈(\n)을 제외한 모든 문자와 한개를 의미
- | : 또는의 의미
- ( : 패턴의 시작
- ) : 패턴의 끝
- * : 0번 이상 반복됨
- + : 1번 이상 반복됨
- { : 반복 횟수 지정의 시작
- } : 반복 횟수 지정의 끝
- ? : 하위 표현식을 옵션으로 취급
2) []안에서 사용되었을때
- / : 특수문자 이스케이프
- ^ : 맨 처음 시작되었을 때만 not의 의미, 이외에는 문자로 인식
- - : 문자의 범위 지정

ex) ^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$
대소영문자, 숫자, _, -, .중 한개의 문자인데 문자열의 처음에 나타나야 되고 +가 있어서 한번이상 반복된다.
그 이후 @ 문자 한문자가 있어야 되고 대소영문자, 숫자, -중 한개의 문자인데 +가 있어서 한번이상 반복된다.
그 이후 . 문자 한문자가 있어야 되고 대소영문자, 숫자, -, .중 한개의 문자인데 +가 있어서 한번이상 반복되며 끝난다.

2011/12/06 11:39 2011/12/06 11:39
<script>
<!--
function writ() {
newwin=open('','newwin','width=500,height=500')
newwin.document.writeln("<html><body>")
newwin.document.writeln("<center><font color=green size=4><b>결과화면</b></font></center><hr& gt;")
newwin.document.writeln("<script>")
newwin.document.writeln(document.a.b.value)
newwin.document.writeln("</script>")
newwin.document.writeln("<hr></body></html>")
}
//-->
</script>

<form name=a>
<textarea name=b cols=60 rows=15>
document.write("<font color=blue>안녕하세요?</font><br>");
document.write("<font color=red>반갑습니다</font><br>");
</textarea>
<input type=button value=미리보기 onclick=writ()>
</form>
2011/12/06 11:38 2011/12/06 11:38
&#x000A;

ex)
<div id='example'>
<h2>Demo</h2>
<pre class="brush: javascript">&#x000A; // SyntaxHighlighter makes your code&#x000A; // snippets beautiful without tiring&#x000A; // your servers.&#x000A; // http://alexgorbatchev.com&#x000A; var setArray = function(elems) {&#x000A; this.length = 0;&#x000A; push.apply(this, elems);&#x000A; return this;&#x000A; }&#x000A;</pre>&#x000A;

</div>
2011/12/06 11:38 2011/12/06 11:38

<HTML>
<HEAD>
<TITLE>
화면상의 객체 위치,크기 </TITLE>
<SCRIPT LANGUAGE="JavaScript" >
<!--
function getBounds(tag)
{
var ret = new Object();
if(document.all) {
var rect = tag.getBoundingClientRect();
ret.left = rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft);
ret.top = rect.top + (document.documentElement.scrollTop || document.body.scrollTop);
ret.width = rect.right - rect.left;
ret.height = rect.bottom - rect.top;
} else {
var box = document.getBoxObjectFor(tag);
ret.left = box.x;
ret.top = box.y;
ret.width = box.width;
ret.height = box.height;
}
return ret;
}

//-->
</SCRIPT>
</HEAD>

<BODY>
<BR><BR><BR><BR><BR>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id="youranytag" style="border:1px solid ;width:500px;">aa</span>

<SCRIPT LANGUAGE="JavaScript">
<!--
var box = getBounds(document.getElementById('youranytag'));
var str = "left:"+box.left+"/top:"+box.top+"/width:"+box.width+"/height:"+box.height;
alert(str);
//-->
</SCRIPT>
</BODY>
</HTML>
2011/12/06 11:38 2011/12/06 11:38

<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
<script type="text/javascript">

// InternetVersion
function getInternetVersion(ver) {
var rv = -1; // Return value assumes failure.
var ua = navigator.userAgent;
var re = null;
if(ver == "MSIE"){
re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
}else{
re = new RegExp(ver+"/([0-9]{1,}[\.0-9]{0,})");
}
if (re.exec(ua) != null){
rv = parseFloat(RegExp.$1);
}
return rv;
}

//브라우저 종류 및 버전확인
function browserCheck(){
var ver = 0; // 브라우저 버전정보
if(navigator.appName.charAt(0) == "N"){
if(navigator.userAgent.indexOf("Chrome") != -1){
ver = getInternetVersion("Chrome");
alert("Chrome"+ver+"입니다.");
}else if(navigator.userAgent.indexOf("Firefox") != -1){
ver = getInternetVersion("Firefox");
alert("Firefox"+ver+"입니다.");
}else if(navigator.userAgent.indexOf("Safari") != -1){
ver = getInternetVersion("Safari");
alert("Safari"+ver+"입니다.");
}
}else if(navigator.appName.charAt(0) == "M"){
ver = getInternetVersion("MSIE");
alert("MSIE"+ver+"입니다.");
}
}
</script>
</head>
<body>
<input type="button" value="브라우저판별" onclick="browserCheck();">
</body>
</html>

========================================================================================

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<script>
var Station = {
check : function (type, checkStr, checkPoint)
{
var name = "ETC";
for ( var list in checkPoint )
{
if (checkStr.indexOf(list) != -1)
{
name = checkPoint[list];
}
}
escape("this." + type + " = function () { return name }") ;
return name;
},
os : function ()
{
var checkStr = navigator.platform.toLowerCase();
var checkPoint =
{
"win" : "WINDOW", "mac" : "MAC", "unix" : "UNIX", "linux" : "LINUX"
}
return this.check("os", checkStr, checkPoint );
},
browser : function ()
{
var checkStr = navigator.userAgent.toLowerCase();
var checkPoint =
{
"msie 6" : "IE6" , "msie 7" : "IE7", "firefox" : "FF", "navigator" : "NETSCAPE", "opera" : "OPERA"
}
return this.check("browser", checkStr, checkPoint);

}
}
document.write("OS : " + Station.os() + "<br/>");
document.write("Browser : " + Station.browser() + "<br/>");
</script>
</body>
</html>

2011/12/06 11:37 2011/12/06 11:37

function scrollEnd(){
var scrollheight = document.compatMode == "CSS1Compat" ? document.documentElement.scrollHeight :

document.body.scrollHeight;
var clientHeight = document.compatMode == "CSS1Compat" ? document.documentElement.clientHeight :

document.body.clientHeight;
var ScrollTop = document.compatMode == "CSS1Compat" ? document.documentElement.scrollTop :

document.body.scrollTop;
var scrollPos = scrollheight - ScrollTop;

if (clientHeight == scrollPos) { // 스크롤 바가 맨 밑에 위치한다면
alert ("끝까지 확인함!!");
}

<BODY onscroll=scrollEnd();>

2011/12/06 11:37 2011/12/06 11:37

<script type="text/javascript">
var mobileKeyWords = new Array('iPhone', 'iPod', 'BlackBerry', 'Android', 'Windows CE', 'LG', 'MOT', 'SAMSUNG', 'SonyEricsson');
for (var word in mobileKeyWords){
if (navigator.userAgent.match(mobileKeyWords[word]) != null){
location.href = "http://m.naver.com";
break;
}

}
</script>

2011/12/06 11:37 2011/12/06 11:37

구글번역에서 소리를 제공하는 url를 이용하여 간단한 TTS 구현 예제

<HTML>
<HEAD>
<TITLE> 구글음성서비스 </TITLE>
<META name="Generator" content="EditPlus">
<META name="Author" content="">
<META name="Keywords" content="">
<META name="Description" content="">
<SCRIPT type="text/javascript">
<!--
function doVoice(){
var str = document.getElementById("txt").value;
var urlPar="http://translate.google.co.kr/translate_tts?ie=UTF-8&q="+encodeURI(str)+"&tl=ko&prev=input";
document.getElementById("bgs").src =urlPar;

document.getElementById("view").innerText=encodeURI(str);
}
//-->
</SCRIPT>
</HEAD>

<BODY>
한글을 입력해주세요<br>

<INPUT type="text" name="txt" id="txt">
<INPUT type="button" value="음성듣기" onclick="javascript:doVoice()">
<div id="view"></div>

<bgsound id="bgs">


</BODY>
</HTML>               

2011/12/06 11:36 2011/12/06 11:36