주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

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

광수 | 2001.10.17 00:43:50 댓글: 0 조회: 424 추천: 14
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758825
▶ 자신만의 메모장! - 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 변수에 넣는 것입니다. ^^


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


* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (14) 선물 (0명)
첨부파일 다운로드 ( 1 )
memo4.zip | 3.0KB / 12 Download
IP: ♡.149.♡.65
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11845
관리자
2003-09-20
11395
관리자
2003-09-20
20523
지구인
2010-08-27
19325
지구인
2009-09-07
13648
SOLIDH
2010-01-29
15601
엔죠라이프
2004-10-07
16701
노아
2001-10-27
553
노아
2001-10-27
525
노아
2001-10-27
462
노아
2001-10-27
2893
네로™
2001-10-26
958
네로™
2001-10-22
1748
네로™
2001-10-22
1671
네로™
2001-10-21
2929
네로™
2001-10-21
1593
네로™
2001-10-21
539
네로
2001-10-18
658
네로
2001-10-18
530
네로
2001-10-18
1672
네로
2001-10-18
1158
네로
2001-10-18
543
네로
2001-10-18
1033
네로
2001-10-18
956
네로
2001-10-18
2436
광수
2001-10-17
529
광수
2001-10-17
485
광수
2001-10-17
424
모이자 모바일