자신만의 메모장! - 3.내용처리#2 > 강의(과거자료)

본문 바로가기

강의(과거자료)

자신만의 메모장! - 3.내용처리#2

페이지 정보

작성자 BiHon 댓글 0건 조회 6,040회 작성일 01-09-27 21:14

본문

▶ 자신만의 메모장! - 3.내용처리#2

study_input.html 문서로부터 넘겨받은 값을 study_write.php 파일에서 처리를 하게끔
했죠. study_write.php 파일을 작성 전에 알아둬야 할 사항들입니다. (두번째)


▷ 이름(닉)과 메모의 길이가 지정길이 이상일 경우의 처리...

고정길이 형태로 저장해야 하기 때문에 이름(닉) 12자 이상일 경우, 메모 100자
이상일 경우에는 뒷부분을 잘라내야합니다. 보통 영문,숫자,특수기호 등등은 모두
아스키값이 127 이하에 위치합니다. (0~127:128)

substr() 함수를 이용해 일정 영역을 자를 수 있지만 잘리는 영역이 한글의 중간일
경우 엉뚱한 문자가 뒤에 붙습니다. 이 경우 고전적인 방법인 첫 글자부터 지정된
길이가 될때까지 한글자씩 아스키값을 체크해 깔끔하게 자르는 방법이 쓰입니다.

일반 처리를 한번 볼까요?

[study_cut.php]
--------------------------------------------------------------------------------
<?
$string = "비혼의 조그만 세상!"; // 문자열
$len = strlen($string); // 문자열의 길이
for ($i=0; $i<$len; $i++) { // 문자열의 길이만큼 반복
echo "[$i] ".substr($string,0,$i)."<br>\n"; // 처음부터 지정길이만큼 잘라 출력
}
?>
--------------------------------------------------------------------------------
- 미리보기 : http://dreamphp.com/study2/memo/study_cut.php
- 소스보기 : http://dreamphp.com/study2/memo/study_cut.phps

실행 결과는 아래와 같습니다.

[0]
[1] ?br> [2] 비
[3] 비?br> [4] 비혼
[5] 비혼?br> [6] 비혼의
[7] 비혼의
[8] 비혼의 ?br> [9] 비혼의 조
[10] 비혼의 조?br> [11] 비혼의 조그
[12] 비혼의 조그?br> [13] 비혼의 조그만
[14] 비혼의 조그만
[15] 비혼의 조그만 ?br> [16] 비혼의 조그만 세
[17] 비혼의 조그만 세?br> [18] 비혼의 조그만 세상


그럼 이것을 응용해 보겠습니다.

[study_cut2.php]
--------------------------------------------------------------------------------
<?
$string = "비혼의 조그만 세상!"; // 문자열
$len = strlen($string); // 문자열의 길이
for ($i=0; $i<$len; $i++) { // 처음부터 문자열 길이만큼 반복
echo "[$i] "; // 번호 출력
if (ord(substr($string,$i,1))<=127) { // 한글자의 아스키값 구해 127 이하면
echo substr($string,0,$i); // 처음부터 해당 위치까지 출력
} else { // 127 초과면
echo substr($string,0,$i++); // 처음부터 해당 위치 + 1 까지 출력
}
echo "<br>\n"; // 다음줄
}
?>
--------------------------------------------------------------------------------
- 미리보기 : http://dreamphp.com/study2/memo/study_cut2.php
- 소스보기 : http://dreamphp.com/study2/memo/study_cut2.phps

조금씩 잘라서 보시면 이해하는데 어려움이 없을거에요. 핵심은 한글자를 잘라
아스키값을 체크해, 127 이상일 경우는 현재 위치에 1을 더해 ($i++) 깨지지 않게
출력하도록 한것입니다.

실행 결과는 다음과 같습니다.

[0]
[2] 비
[4] 비혼
[6] 비혼의
[7] 비혼의
[9] 비혼의 조
[11] 비혼의 조그
[13] 비혼의 조그만
[14] 비혼의 조그만
[16] 비혼의 조그만 세
[18] 비혼의 조그만 세상


위의 핵심적인 부분을 함수로 만들어 편하게 문자열을 가공할 수 있습니다.

이름(닉)과 메모가 12자, 100자를 넘어가면 위의 문자열을 자르는 코드를 이용해
필요한 크기로 자른 뒤에 문자열 가공을 해야 합니다. 함수로 바꾼 것은
study_write.php 파일을 작성할때 올리도록 하겠습니다.


▷ 정보를 구하자...

날짜와 시간의 경우는 date("Y-m-d H:i:s"); 등으로 쉽게 알 수 있습니다.
사용자의 아이피는 $REMOTE_ADDR 변수로 쉽게 알 수 있습니다.
그리고 이름과 메모 등은 $memo_name, $memo_memo 변수에 자동으로 저장되어있겠죠?

이것을 고정 길이 형태로 지정하려면 sprintf() 함수를 이용하면 됩니다. 이미 파일
카운터에서 다룬 함수입니다.

이름(닉)과 메모등과 위의 날짜,시간,아이피 등의 정보를 고정된 길이로 저장하는
코드는 다음과 같습니다.

$memo_name = 문자열자르기함수($memo_name,12);
$memo_memo = 문자열자르기함수($memo_memo,100);
$memo_data = sprintf("%18s%15s%12s%100s",date("Y-m-dH:i:s"),$REMOTE_ADDR,
$memo_name,$memo_memo);

먼저 이름(닉), 메모를 위에서 제시한 문자열 자르기 코드를 이용해 특정 길이 이상은
잘라내고, sprintf() 함수를 이용해 날짜,시간,이름(닉),메모를 각각 18자,15자,12자,
100자 등 고정된 길이로 $memo_data 변수에 넣는 것입니다. ^^


▶ 조금씩 메모장 완성의 기미가 보이죠? ^-^

댓글목록

등록된 댓글이 없습니다.

회원로그인


Copyright © 1998~2019 DreamPHP.com All rights reserved.