php로 텍스트라인에서 영문 한글 특수문자 숫자 지우기
페이지 정보

본문
php로 텍스트라인에서 영문 한글 특수문자 숫자 지우기
어떤 문장을 변수로 받아서 그 안에 들어있는 한글 영문 숫자 특수문자를 지우는 알고리즘이 필요합니다.
원래 의도는 텍스트 문장에서 한자(한문)만 추출하는 것입니다.
그런데 이 문제를 풀기가 너무 어려워
답변이 없을것 같아서 해결방법을 돌렸습니다.
텍스트에는 한글 한문 숫자 영문
그리고 특수문자
( ) [ ] { } , . · ? ! ' "
이런정도가 들어있습니다.
그래서 여기서 한글 영문 숫자 특수문자를 지우면 한문이 남게되는 방법을 택했습니다.
완전한 소스로 부탁드립니다.
현재 텍스트 파일은 ANSI로 저장되어 있습니다.
진행중인 질문은
http://kin.naver.com/ing/detail.php?d1id=1&dir_id=10111&eid=r+CMA1b3u7D+VIGwWiOFVaMyFGZSsY0u&qb=cGhwIMfRwNo=
입니다.
질문자채택
/*
AC00 ~ D7A3 //16진수
44032 ~ 55203 //10진수
11172 개
초성 19 : ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
중성 21 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
종성 28 : ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
그라니께..
가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛 부터~
히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟힠힡힢힣 까지
*/
$str = "한글 123 ACB 漢子( ) [ ] { } , . · ? ! ' ";
$str = ereg_replace("[\(|\)|\[|\]|\{|\}|\,|\.|\·|\?|\!|'|\\|\"]","",$str);
$str = ereg_replace("[a-zA-Z0-9]|[[:space:]]","",$str);
//한글 제거 부분
while( $i< strlen($str) ){
$oneChar = substr($str,$i,2); //영문 숫자 특수 문자 제거후 남는것은 유니코드 2바이트 문자뿐이므로
$hex = bin2hex($oneChar); //바이너리 데이터를 16진수 표현으로 바꿉니다.
$dec = hexdec($hex); //계산하기 쉽도록 10진수로 바꿉니다. 걍 계산해도 데욤 제가 숫자에 약해서 ㅠㅠ
if( $dec >= 44032 && $dec <=55203 ){
// echo "이 글자는 한글입니다.";
}else{
$newStr .= $oneChar; //영문 숫자 특수 문자 한글 제거후 남는것을 변수에 담습니다.
}
$i= $i+2;
}
echo $newStr;
?>
문제점이 있는데 말씀드리면 영문 숫자 특수문자 공백 한글을 제거했다고 나머지가 다 한자라고 말할수는 없는거 같은데요.. 입력받을때 특수한 언어로 입력하지 않는다면 말이죠 ^^
한자의 유니코드 범위를 알아보면 어떨까요?
http://blog.naver.com/hdlee91/150010927321
http://www.unicord.org/
=================================================================
다른 질문에 뎅겨오니 다른분이 벌써 답변을 달으셨더군요 ㅎ
str_split <==요렇게 좋은 함수를 php5라면 요걸로 구현하시면 편할듯하네요
2007.01.23.
우선 한글, 영문, 숫자, 특문을 검출하는 함수를 만드시구요.
replace로 함수변환하시면 님 말씀대로 남는것은 한문뿐이겠지요.
공백이 남는다면 한문이 입력 안된것이구요,
2007.01.18.
yyyy년mm월dd일 포멧의 날짜를 yyyymmdd 형식으로 바꾸는 다양한 방법들.
$date = '2010년04월20일'; // 형태는 4년2월2일
이 값에서 숫자 부분인 '20100420'만 뽑는 방법입니다.
먼저 문자열(배열 관련 함수를 많이 사용하지만) 처리 방법입니다.
▶ 문자열 처리 #1
고정 길이기 때문에 substr() 함수를 이용합니다.
────────────────────────────────────────
$date = substr($date,0,4).substr($date,6,2).substr($date,10,2);
────────────────────────────────────────
substr() : http://php.net/manual/kr/function.substr.php
참고로 .은 문자열 결합 연산자입니다.
String Operators : http://php.net/manual/kr/language.operators.string.php
▶ 문자열 처리 #2
str_replace() 함수를 이용해 년, 월, 일 문자를 제거합니다.
────────────────────────────────────────
$date = str_replace('년','',$date); // 201004월20일
$date = str_replace('월','',$date); // 20100420일
$date = str_replace('일','',$date); // 20100420
────────────────────────────────────────
str_replace() : http://php.net/manual/kr/function.str-replace.php
참고로 해석이 필요없는 문자열 값은 '(Single Quote)로 감싸주세요.
문자열 관련 : http://php.net/manual/en/language.types.string.php
▶ 문자열 처리 #3
strtr() 함수를 이용하면 #2 과정을 한 번에 처리할 수 있습니다.
────────────────────────────────────────
$remove['년'] = '';
$remove['월'] = '';
$remove['일'] = '';
// 또는
$remove = array('년'=>'','월'=>'','일'=>'');
// 둘 중 편한 형태로 미리 연관 배열을 할당합니다.
$date = strtr($date,$remove);
// 물론 변수에 담지 않고 바로 이용도 가능합니다.
$date = strtr($date,array('년'=>'','월'=>'','일'=>''));
────────────────────────────────────────
strtr() : http://php.net/manual/en/function.strtr.php
연관 배열 : http://php.net/manual/kr/language.types.array.php
▶ 문자열 처리 #4
explode() 함수를 이용해 년, 월, 일을 잘라줍니다.
────────────────────────────────────────
$a = explode('년',$date); // [0] => 2010 [1] => 04월20일
$b = explode('월',$a[1]); // [0] => 04 [1] => 20일
$c = explode('일',$b[1]); // [0] => 20 [1] =>
$date = $a[0].$b[0].$c[0];
────────────────────────────────────────
reset() 함수로 배열의 첫 번째 값을 쉽게 가져올 수 있습니다.
array_shift() 함수로 배열의 첫 번째 값을 뺄 수 있습니다.
explode() : http://php.net/manual/kr/function.explode.php
reset() : http://php.net/manual/kr/function.reset.php
array_shift() : http://php.net/manual/kr/function.array-shift.php
▶ 문자열 처리 #5
list() 함수를 이용하면 #4 변수 사용이 좀 더 간편해집니다.
────────────────────────────────────────
list($y,$date) = explode('년',$date); // $y=2010, $date=04월20일
list($m,$d) = explode('월',$date); // $m=04, $d=20일
list($d) = explode('일',$d); // $d=20
$date = $y.$m.$d;
────────────────────────────────────────
list() : http://php.net/manual/kr/function.list.php
▶ 문자열 처리 #6
explode()와 함께하는 implode() 함수를 이용해보겠습니다.
────────────────────────────────────────
$date = implode('',explode('년',$date));
$date = implode('',explode('월',$date));
$date = implode('',explode('일',$date));
────────────────────────────────────────
implode() : http://php.net/manual/kr/function.implode.php
▶ 문자열 처리 #7
sscanf() 함수를 이용하면 형식에 맞게 값을 뽑을 수 있습니다.
다 만, 앞에 0이 붙었으면 0을 제거해주기 때문에 조정이 필요합니다.
────────────────────────────────────────
$temp = sscanf($date,'%4d년%2d월%2d일'); // [0] => 2010 [1] => 4 [2] => 20
if ( $temp[1]<10 ) $temp[1] = '0'.$temp[1]; // 4 => 04
if ( $temp[2]<10 ) $temp[2] = '0'.$temp[2];
$date = implode('',$temp); // $date = $temp[0].$temp[1].$temp[2];
────────────────────────────────────────
sscanf() : http://php.net/manual/kr/function.sscanf.php
▶ 문자열 처리 #8
#7의 코드에 그 위에서 언급한 list() 함수를 이용해볼까요?
────────────────────────────────────────
list($y,$m,$d) = sscanf($date,'%4d년%2d월%2d일'); // $y=2010, $m=4, $d=20
if ( $m<10 ) $m = '0'.$m;
if ( $d<10 ) $d = '0'.$d;
$date = $y.$m.$d;
────────────────────────────────────────
참고로 each() 함수를 살펴보세요. list() 함수와 궁합이 좋습니다.
each() : http://php.net/manual/kr/function.each.php
▶ 문자열 처리 #9
sscanf()에서 곧바로 변수 할당도 가능합니다.
이번에는 sprintf() 함수로 형식에 맞는 문자열을 만들어보겠습니다.
────────────────────────────────────────
sscanf($date,'%4d년%2d월%2d일',$y,$m,$d); // $y=2010, $m=4, $d=20
$date = sprintf('%04d%02d%02d',$y,$m,$d);
────────────────────────────────────────
sprintf() : http://php.net/manual/kr/function.sprintf.php
▶ 문자열 처리 #10
strpos() 함수를 이용하면 지정한 문자(열)의 위치를 구할 수 있습니다.
────────────────────────────────────────
$py = strpos($date,'년'); // 4
$pm = strpos($date,'월'); // 8
$pd = strpos($date,'일'); // 12
$date = substr($date,0,$py).substr($date,$py+2,2).substr($date,$pm+2,2);
────────────────────────────────────────
strpos() : http://php.net/manual/kr/function.strpos.php
▶ 문자열 처리 #11
이번에는 고전적인 방법을 이용해보겠습니다.
문자열의 길이만큼 반복하며 1바이트씩 읽어 숫자일 때 붙여주는 것이죠.
먼저 풀어쓴 코드부터 보시죠.
────────────────────────────────────────
$original = $date; // $original에 기존 $date값을 할당
$len = strlen($date); // 문자열 길이 구해주고
$date = ''; // 결과값을 이곳에 담기 위해 빈 문자열로
for ($i=0;$i<$len;$i++) // 길이만큼 반복
{
if ( is_numeric($original[$i]) ) $date.= $original[$i]; // 숫자인 경우 붙임
}
────────────────────────────────────────
for() : http://php.net/manual/kr/control-structures.for.php
strlen() : http://php.net/manual/kr/function.strlen.php
is_numeric() : http://php.net/manual/kr/function.is-numeric.php
ctype_digit() : http://php.net/manual/kr/function.ctype-digit.php
편 의상 is_numeric() 함수를 이용했습니다.
그리고 위에서 보다시피 '2010년04월20일'은 문자열 값이지만
[] 를 이용해 배열처럼 접근할 수 있습니다.
▶ 문자열 처리 #12
#11보다 더 고전적인 방법입니다. 아스키 값을 이용합니다.
────────────────────────────────────────
$original = $date; // $original에 기존 $date값을 할당
$len = strlen($date); // 문자열 길이 구해주고
$date = ''; // 결과값을 이곳에 담기 위해 빈 문자열로
for ($i=0;$i<$len;$i++) // 길이만큼 반복
{
$c = $original[$i]; // 1바이트 문자
$asc = ord($c); // 아스키 코드
if ( $asc<48 || $asc>57 ) continue; // 숫자 범위 아니면 Skip
$date.= $c;
}
────────────────────────────────────────
숫자 범위가 아니면 위와 같은 조건이면 됩니다.
숫자 범위로 조건을 바꾼다면? ( $asc>47 && $asc<58 )입니다.
참고로 <= 비교보다 < 비교가 빠릅니다.
그래 서 ( $asc>=48 && $asc<=57 )로 하기보다 위 조건을 권장합니다.
누누이 강조하는 부분이지만 쓰기 나름이니까 편한 대로 쓰면 됩니다.
또는 어차피 숫자 외의 문자열이라봐야 년, 월, 일이니
아 스키 값이 127 이상인 경우를 걸러주면 됩니다.
ord() : http://php.net/manual/kr/function.ord.php
ASCII Table : http://www.asciitable.com/
▶ 문자열 처리 #13
#11, #12의 for()문을 줄인 형태입니다.
────────────────────────────────────────
for($i=0,$o=$date,$date='',$l=strlen($o);$i<$l;$i++)if(is_numeric($o[$i]))$date.=$o[$i];
────────────────────────────────────────
▶ 문자열 처리 #14
#13 을 아예 for()문으로 끝내는 것도 가능합니다.
────────────────────────────────────────
for ($i=0,$l=strlen($o=$date),$date='';$i<$len;$i++,$date.=is_numeric($o[$i-1])?$o[$i-1]:'');
────────────────────────────────────────
빠질 뻔 했는데 값의 할당은 오른쪽부터 왼쪽으로 진행됩니다.
$l=strlen($o=$date)
$o에 $date가 할당되고, $o의 길이가 $l에 할당됩니다.
할당 연산자 : http://php.net/manual/kr/language.opera ··· ment.php
연산자 우선권 : http://php.net/manual/kr/language.opera ··· ence.php
▶ 문자열 처리 #15
"키=값" 형태로 가공해 parse_str() 함수를 이용하는 방법입니다.
────────────────────────────────────────
$date = 'y='.substr($date,0,-2); // y=2010년04월20
$date = str_replace('년','&m=',$date); // y=2010&m=04월20
$date = str_replace('월','&d=',$date); // y=2010&m=04&d=20
parse_str($date);
$date = $y.$m.$d;
────────────────────────────────────────
parse_str() 함수를 보면, extract() 함수가 떠오르죠.
parse_str() : http://php.net/manual/kr/function.parse-str.php
extract() : http://php.net/manual/kr/function.extract.php
두 번째 인자를 주면 그 변수에 값을 받게 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
// 위 3줄 동일
parse_str($date,$t); // 'y'=>'2010', 'm'=>'04', 'd'=>'20'
$date = implode('',$t); // $date = $t['y'].$t['m'].$t['d'];
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
▶ 문자열 처리 #16
#11 ~ #14의 코드와 비슷합니다.
[]를 이용해 문자열도 배열 형태로 접근이 가능하다고 했죠?
이번에는 문자열을 정말 배열로 만들어 처리해보겠습니다.
그리고 똑같은 코드로 하면 재미없으니 다른 코드를 부르겠습니다.
────────────────────────────────────────
$temp = str_split($date);
$date = '';
foreach ( $temp as $char )
{
if ( ord($char)<128 ) $date.= $char;
}
────────────────────────────────────────
1바이트로 나눠 배열 끝까지 반복, 아스키 값 비교로 결과값을 구합니다.
foreach()도 참 유용한 제어 구조 중 하나입니다. 배열과 찰떡 호흡!
str_split() : http://php.net/manual/kr/function.str-split.php
foreach() : http://php.net/manual/kr/control-structures.foreach.php
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$t=str_split($date);$date='';
foreach($t as $c)if(ord($c)<128)$date.=$c;
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
▶ 문자열 처리 #17
substr_replace()를 깜빡했군요. str_replace()와 비교해보는 재미를···.
────────────────────────────────────────
$date = substr_replace($date,'',4,2); // 201004월20일
$date = substr_replace($date,'',6,2); // 20100420일
$date = substr_replace($date,'',8,2); // 20100420
────────────────────────────────────────
substr_replace() : http://php.net/manual/en/function.substr-replace.php
정규식으로 처리하는 방법 역시 다양합니다.
■ 정규식 처리 #1
제 일 간단한 방법은 숫자 외의 문자를 제거하는 것입니다.
────────────────────────────────────────
$date = preg_replace('/\D/','',$date);
────────────────────────────────────────
10진 숫자가 아닌 임의의 문자(\D)를 ''로 치환해주는 방법이죠.
정규 표현식 상세 : http://php.net/manual/kr/regexp.reference.php
정규 표현식 : http://php.net/manual/en/reference.pcre ··· ntax.php
임의의 10진 숫자는 \d로 표현합니다. 또는 [0-9]로 표현하죠.
여기에 부정 클래스를 사용하면 반대가 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$date = preg_replace('/[^0-9]/','',$date);
$date = preg_replace('/[^\d]/','',$date);
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
preg_replace() : http://php.net/manual/kr/function.preg-replace.php
참 고로 ereg_replace(), eregi_replace() 등 POSIX Regex 관련 함수들은
PHP 5.3 버전부터 중지됩니다.
POSIX Regex 관련 함수 : http://php.net/manual/kr/ref.regex.php
그러니 어서 펄 호환 정규식으로 갈아타시길···.
Regular Expressions (Perl-Compatible) : http://php.net/manual/kr/book.pcre.php
■ 정규식 처리 #2
숫자만 뽑아 묶어주는 방법입니다.
────────────────────────────────────────
preg_match_all('/\d/',$date,$matches);
$date = implode('',$matches[0]);
────────────────────────────────────────
위 와 같이 실행했을 때 $matches의 값입니다.
문자열 처리 과정에서 언급한 implode() 함수로 깔끔하게 묶어주면 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Array
(
[0] => Array
(
[0] => 2
[1] => 0
[2] => 1
[3] => 0
[4] => 0
[5] => 4
[6] => 2
[7] => 0
)
)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
preg_match_all() : http://php.net/manual/kr/function.preg-match-all.php
■ 정규식 처리 #3
preg_split() 함수로 대놓고 년, 월, 일로 잘라줘도 됩니다.
────────────────────────────────────────
list($y,$m,$d) = preg_split('/년|월|일/',$date);
$date = $y.$m.$d;
────────────────────────────────────────
preg_split() : http://php.net/manual/kr/function.preg-split.php
차근차근 읽어본 경우라면 위 두 줄의 코드를 한 줄로 바꿀 수 있겠죠?
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$date = implode('',preg_split('/년|월|일/',$date));
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
■ 정규식 처리 #4
#1의 코드와 기본은 같고 메타 문자만 다릅니다.
────────────────────────────────────────
$date = preg_replace('/\W/','',$date);
────────────────────────────────────────
어떠한 문자나 숫자, _가 \w며, \W는 그 반대입니다.
특성이 있지만, 년, 월, 일 정도야···. ^^);;;
■ 정규식 처리 #5
preg_grep()의 활용 예를 위해 하나 더 추가합니다.
str_split() 함수와 마찬가지로 잘라주고, 숫자 부분만 가져다 묶어줍니다.
────────────────────────────────────────
$split = preg_split('//',$date,-1,PREG_SPLIT_NO_EMPTY);
$date = implode('',preg_grep('/\d/',$split));
────────────────────────────────────────
preg_grep() : http://php.net/manual/kr/function.preg-grep.php
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$date = implode('',preg_grep('/\d/',preg_split('/()/',$date,-1,PREG_SPLIT_NO_EMPTY)));
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
■ 정규식 처리 #6
#2 에서 preg_match_all()을 사용했죠? 이번에는 preg_match() 사용입니다.
────────────────────────────────────────
preg_match('/(\d+)년(\d+)월(\d+)일/',$date,$match);
$date = implode('',array_slice($match,1));
────────────────────────────────────────
$match의 값은 아래와 같습니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Array
(
[0] => 2010년04월20일
[1] => 2010
[2] => 04
[3] => 20
)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
여기서 array_slice() 함수를 이용해 두 번째 배열부터 가져와 묶어줍니다.
문자열의 substr() 함수와 사용 방법이 같습니다. 대상만 배열이죠.
preg_match() : http://php.net/manual/kr/function.preg-match.php
array_slice() : http://php.net/manual/kr/function.array-slice.php
■ 정규식 처리 #7
응용 예입니다.
────────────────────────────────────────
preg_match('/(\d+)(\W.)(\d+)(\W.)(\d+)(\W.)/',$date,$matches);
$date = $matches[1].$matches[3].$matches[5];
────────────────────────────────────────
$matches 값은 아래와 같습니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Array
(
[0] => 2010년04월20일
[1] => 2010
[2] => 년
[3] => 04
[4] => 월
[5] => 20
[6] => 일
)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
▣ 날짜 함수 이용
문자열 처리 응용, strtotime() 함수와 date() 함수가 등장합니다.
년, 월, 일을 제거하면 그것으로 끝이지만 응용 차원에서 추가했습니다.
참. 꼭 -으로 바꿀 필요는 없습니다.
────────────────────────────────────────
$date = str_replace('년','-',$date); // 2010-04월20일
$date = str_replace('월','-',$date); // 2010-04-20일
$date = str_replace('일','',$date); // 2010-04-20
$date = date('Ymd',strtotime($date));
────────────────────────────────────────
strtotime() : http://php.net/manual/en/function.strtotime.php
date() : http://php.net/manual/kr/function.date.php
한 줄로 줄이려면? 문자열 처리 #3에서 언급한 strtr()을 사용하면 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
echo date('Ymd',strtotime(strtr($date,array('년'=>'/','월'=>'/','일'=> ''))));
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
출처: https://openbee.kr/264 [오픈비 : 삽질은없다]
어떤 문장을 변수로 받아서 그 안에 들어있는 한글 영문 숫자 특수문자를 지우는 알고리즘이 필요합니다.
원래 의도는 텍스트 문장에서 한자(한문)만 추출하는 것입니다.
그런데 이 문제를 풀기가 너무 어려워
답변이 없을것 같아서 해결방법을 돌렸습니다.
텍스트에는 한글 한문 숫자 영문
그리고 특수문자
( ) [ ] { } , . · ? ! ' "
이런정도가 들어있습니다.
그래서 여기서 한글 영문 숫자 특수문자를 지우면 한문이 남게되는 방법을 택했습니다.
완전한 소스로 부탁드립니다.
현재 텍스트 파일은 ANSI로 저장되어 있습니다.
진행중인 질문은
http://kin.naver.com/ing/detail.php?d1id=1&dir_id=10111&eid=r+CMA1b3u7D+VIGwWiOFVaMyFGZSsY0u&qb=cGhwIMfRwNo=
입니다.
질문자채택
/*
AC00 ~ D7A3 //16진수
44032 ~ 55203 //10진수
11172 개
초성 19 : ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
중성 21 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
종성 28 : ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
그라니께..
가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛 부터~
히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟힠힡힢힣 까지
*/
$str = "한글 123 ACB 漢子( ) [ ] { } , . · ? ! ' ";
$str = ereg_replace("[\(|\)|\[|\]|\{|\}|\,|\.|\·|\?|\!|'|\\|\"]","",$str);
$str = ereg_replace("[a-zA-Z0-9]|[[:space:]]","",$str);
//한글 제거 부분
while( $i< strlen($str) ){
$oneChar = substr($str,$i,2); //영문 숫자 특수 문자 제거후 남는것은 유니코드 2바이트 문자뿐이므로
$hex = bin2hex($oneChar); //바이너리 데이터를 16진수 표현으로 바꿉니다.
$dec = hexdec($hex); //계산하기 쉽도록 10진수로 바꿉니다. 걍 계산해도 데욤 제가 숫자에 약해서 ㅠㅠ
if( $dec >= 44032 && $dec <=55203 ){
// echo "이 글자는 한글입니다.";
}else{
$newStr .= $oneChar; //영문 숫자 특수 문자 한글 제거후 남는것을 변수에 담습니다.
}
$i= $i+2;
}
echo $newStr;
?>
문제점이 있는데 말씀드리면 영문 숫자 특수문자 공백 한글을 제거했다고 나머지가 다 한자라고 말할수는 없는거 같은데요.. 입력받을때 특수한 언어로 입력하지 않는다면 말이죠 ^^
한자의 유니코드 범위를 알아보면 어떨까요?
http://blog.naver.com/hdlee91/150010927321
http://www.unicord.org/
=================================================================
다른 질문에 뎅겨오니 다른분이 벌써 답변을 달으셨더군요 ㅎ
str_split <==요렇게 좋은 함수를 php5라면 요걸로 구현하시면 편할듯하네요
2007.01.23.
우선 한글, 영문, 숫자, 특문을 검출하는 함수를 만드시구요.
replace로 함수변환하시면 님 말씀대로 남는것은 한문뿐이겠지요.
공백이 남는다면 한문이 입력 안된것이구요,
2007.01.18.
yyyy년mm월dd일 포멧의 날짜를 yyyymmdd 형식으로 바꾸는 다양한 방법들.
$date = '2010년04월20일'; // 형태는 4년2월2일
이 값에서 숫자 부분인 '20100420'만 뽑는 방법입니다.
먼저 문자열(배열 관련 함수를 많이 사용하지만) 처리 방법입니다.
▶ 문자열 처리 #1
고정 길이기 때문에 substr() 함수를 이용합니다.
────────────────────────────────────────
$date = substr($date,0,4).substr($date,6,2).substr($date,10,2);
────────────────────────────────────────
substr() : http://php.net/manual/kr/function.substr.php
참고로 .은 문자열 결합 연산자입니다.
String Operators : http://php.net/manual/kr/language.operators.string.php
▶ 문자열 처리 #2
str_replace() 함수를 이용해 년, 월, 일 문자를 제거합니다.
────────────────────────────────────────
$date = str_replace('년','',$date); // 201004월20일
$date = str_replace('월','',$date); // 20100420일
$date = str_replace('일','',$date); // 20100420
────────────────────────────────────────
str_replace() : http://php.net/manual/kr/function.str-replace.php
참고로 해석이 필요없는 문자열 값은 '(Single Quote)로 감싸주세요.
문자열 관련 : http://php.net/manual/en/language.types.string.php
▶ 문자열 처리 #3
strtr() 함수를 이용하면 #2 과정을 한 번에 처리할 수 있습니다.
────────────────────────────────────────
$remove['년'] = '';
$remove['월'] = '';
$remove['일'] = '';
// 또는
$remove = array('년'=>'','월'=>'','일'=>'');
// 둘 중 편한 형태로 미리 연관 배열을 할당합니다.
$date = strtr($date,$remove);
// 물론 변수에 담지 않고 바로 이용도 가능합니다.
$date = strtr($date,array('년'=>'','월'=>'','일'=>''));
────────────────────────────────────────
strtr() : http://php.net/manual/en/function.strtr.php
연관 배열 : http://php.net/manual/kr/language.types.array.php
▶ 문자열 처리 #4
explode() 함수를 이용해 년, 월, 일을 잘라줍니다.
────────────────────────────────────────
$a = explode('년',$date); // [0] => 2010 [1] => 04월20일
$b = explode('월',$a[1]); // [0] => 04 [1] => 20일
$c = explode('일',$b[1]); // [0] => 20 [1] =>
$date = $a[0].$b[0].$c[0];
────────────────────────────────────────
reset() 함수로 배열의 첫 번째 값을 쉽게 가져올 수 있습니다.
array_shift() 함수로 배열의 첫 번째 값을 뺄 수 있습니다.
explode() : http://php.net/manual/kr/function.explode.php
reset() : http://php.net/manual/kr/function.reset.php
array_shift() : http://php.net/manual/kr/function.array-shift.php
▶ 문자열 처리 #5
list() 함수를 이용하면 #4 변수 사용이 좀 더 간편해집니다.
────────────────────────────────────────
list($y,$date) = explode('년',$date); // $y=2010, $date=04월20일
list($m,$d) = explode('월',$date); // $m=04, $d=20일
list($d) = explode('일',$d); // $d=20
$date = $y.$m.$d;
────────────────────────────────────────
list() : http://php.net/manual/kr/function.list.php
▶ 문자열 처리 #6
explode()와 함께하는 implode() 함수를 이용해보겠습니다.
────────────────────────────────────────
$date = implode('',explode('년',$date));
$date = implode('',explode('월',$date));
$date = implode('',explode('일',$date));
────────────────────────────────────────
implode() : http://php.net/manual/kr/function.implode.php
▶ 문자열 처리 #7
sscanf() 함수를 이용하면 형식에 맞게 값을 뽑을 수 있습니다.
다 만, 앞에 0이 붙었으면 0을 제거해주기 때문에 조정이 필요합니다.
────────────────────────────────────────
$temp = sscanf($date,'%4d년%2d월%2d일'); // [0] => 2010 [1] => 4 [2] => 20
if ( $temp[1]<10 ) $temp[1] = '0'.$temp[1]; // 4 => 04
if ( $temp[2]<10 ) $temp[2] = '0'.$temp[2];
$date = implode('',$temp); // $date = $temp[0].$temp[1].$temp[2];
────────────────────────────────────────
sscanf() : http://php.net/manual/kr/function.sscanf.php
▶ 문자열 처리 #8
#7의 코드에 그 위에서 언급한 list() 함수를 이용해볼까요?
────────────────────────────────────────
list($y,$m,$d) = sscanf($date,'%4d년%2d월%2d일'); // $y=2010, $m=4, $d=20
if ( $m<10 ) $m = '0'.$m;
if ( $d<10 ) $d = '0'.$d;
$date = $y.$m.$d;
────────────────────────────────────────
참고로 each() 함수를 살펴보세요. list() 함수와 궁합이 좋습니다.
each() : http://php.net/manual/kr/function.each.php
▶ 문자열 처리 #9
sscanf()에서 곧바로 변수 할당도 가능합니다.
이번에는 sprintf() 함수로 형식에 맞는 문자열을 만들어보겠습니다.
────────────────────────────────────────
sscanf($date,'%4d년%2d월%2d일',$y,$m,$d); // $y=2010, $m=4, $d=20
$date = sprintf('%04d%02d%02d',$y,$m,$d);
────────────────────────────────────────
sprintf() : http://php.net/manual/kr/function.sprintf.php
▶ 문자열 처리 #10
strpos() 함수를 이용하면 지정한 문자(열)의 위치를 구할 수 있습니다.
────────────────────────────────────────
$py = strpos($date,'년'); // 4
$pm = strpos($date,'월'); // 8
$pd = strpos($date,'일'); // 12
$date = substr($date,0,$py).substr($date,$py+2,2).substr($date,$pm+2,2);
────────────────────────────────────────
strpos() : http://php.net/manual/kr/function.strpos.php
▶ 문자열 처리 #11
이번에는 고전적인 방법을 이용해보겠습니다.
문자열의 길이만큼 반복하며 1바이트씩 읽어 숫자일 때 붙여주는 것이죠.
먼저 풀어쓴 코드부터 보시죠.
────────────────────────────────────────
$original = $date; // $original에 기존 $date값을 할당
$len = strlen($date); // 문자열 길이 구해주고
$date = ''; // 결과값을 이곳에 담기 위해 빈 문자열로
for ($i=0;$i<$len;$i++) // 길이만큼 반복
{
if ( is_numeric($original[$i]) ) $date.= $original[$i]; // 숫자인 경우 붙임
}
────────────────────────────────────────
for() : http://php.net/manual/kr/control-structures.for.php
strlen() : http://php.net/manual/kr/function.strlen.php
is_numeric() : http://php.net/manual/kr/function.is-numeric.php
ctype_digit() : http://php.net/manual/kr/function.ctype-digit.php
편 의상 is_numeric() 함수를 이용했습니다.
그리고 위에서 보다시피 '2010년04월20일'은 문자열 값이지만
[] 를 이용해 배열처럼 접근할 수 있습니다.
▶ 문자열 처리 #12
#11보다 더 고전적인 방법입니다. 아스키 값을 이용합니다.
────────────────────────────────────────
$original = $date; // $original에 기존 $date값을 할당
$len = strlen($date); // 문자열 길이 구해주고
$date = ''; // 결과값을 이곳에 담기 위해 빈 문자열로
for ($i=0;$i<$len;$i++) // 길이만큼 반복
{
$c = $original[$i]; // 1바이트 문자
$asc = ord($c); // 아스키 코드
if ( $asc<48 || $asc>57 ) continue; // 숫자 범위 아니면 Skip
$date.= $c;
}
────────────────────────────────────────
숫자 범위가 아니면 위와 같은 조건이면 됩니다.
숫자 범위로 조건을 바꾼다면? ( $asc>47 && $asc<58 )입니다.
참고로 <= 비교보다 < 비교가 빠릅니다.
그래 서 ( $asc>=48 && $asc<=57 )로 하기보다 위 조건을 권장합니다.
누누이 강조하는 부분이지만 쓰기 나름이니까 편한 대로 쓰면 됩니다.
또는 어차피 숫자 외의 문자열이라봐야 년, 월, 일이니
아 스키 값이 127 이상인 경우를 걸러주면 됩니다.
ord() : http://php.net/manual/kr/function.ord.php
ASCII Table : http://www.asciitable.com/
▶ 문자열 처리 #13
#11, #12의 for()문을 줄인 형태입니다.
────────────────────────────────────────
for($i=0,$o=$date,$date='',$l=strlen($o);$i<$l;$i++)if(is_numeric($o[$i]))$date.=$o[$i];
────────────────────────────────────────
▶ 문자열 처리 #14
#13 을 아예 for()문으로 끝내는 것도 가능합니다.
────────────────────────────────────────
for ($i=0,$l=strlen($o=$date),$date='';$i<$len;$i++,$date.=is_numeric($o[$i-1])?$o[$i-1]:'');
────────────────────────────────────────
빠질 뻔 했는데 값의 할당은 오른쪽부터 왼쪽으로 진행됩니다.
$l=strlen($o=$date)
$o에 $date가 할당되고, $o의 길이가 $l에 할당됩니다.
할당 연산자 : http://php.net/manual/kr/language.opera ··· ment.php
연산자 우선권 : http://php.net/manual/kr/language.opera ··· ence.php
▶ 문자열 처리 #15
"키=값" 형태로 가공해 parse_str() 함수를 이용하는 방법입니다.
────────────────────────────────────────
$date = 'y='.substr($date,0,-2); // y=2010년04월20
$date = str_replace('년','&m=',$date); // y=2010&m=04월20
$date = str_replace('월','&d=',$date); // y=2010&m=04&d=20
parse_str($date);
$date = $y.$m.$d;
────────────────────────────────────────
parse_str() 함수를 보면, extract() 함수가 떠오르죠.
parse_str() : http://php.net/manual/kr/function.parse-str.php
extract() : http://php.net/manual/kr/function.extract.php
두 번째 인자를 주면 그 변수에 값을 받게 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
// 위 3줄 동일
parse_str($date,$t); // 'y'=>'2010', 'm'=>'04', 'd'=>'20'
$date = implode('',$t); // $date = $t['y'].$t['m'].$t['d'];
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
▶ 문자열 처리 #16
#11 ~ #14의 코드와 비슷합니다.
[]를 이용해 문자열도 배열 형태로 접근이 가능하다고 했죠?
이번에는 문자열을 정말 배열로 만들어 처리해보겠습니다.
그리고 똑같은 코드로 하면 재미없으니 다른 코드를 부르겠습니다.
────────────────────────────────────────
$temp = str_split($date);
$date = '';
foreach ( $temp as $char )
{
if ( ord($char)<128 ) $date.= $char;
}
────────────────────────────────────────
1바이트로 나눠 배열 끝까지 반복, 아스키 값 비교로 결과값을 구합니다.
foreach()도 참 유용한 제어 구조 중 하나입니다. 배열과 찰떡 호흡!
str_split() : http://php.net/manual/kr/function.str-split.php
foreach() : http://php.net/manual/kr/control-structures.foreach.php
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$t=str_split($date);$date='';
foreach($t as $c)if(ord($c)<128)$date.=$c;
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
▶ 문자열 처리 #17
substr_replace()를 깜빡했군요. str_replace()와 비교해보는 재미를···.
────────────────────────────────────────
$date = substr_replace($date,'',4,2); // 201004월20일
$date = substr_replace($date,'',6,2); // 20100420일
$date = substr_replace($date,'',8,2); // 20100420
────────────────────────────────────────
substr_replace() : http://php.net/manual/en/function.substr-replace.php
정규식으로 처리하는 방법 역시 다양합니다.
■ 정규식 처리 #1
제 일 간단한 방법은 숫자 외의 문자를 제거하는 것입니다.
────────────────────────────────────────
$date = preg_replace('/\D/','',$date);
────────────────────────────────────────
10진 숫자가 아닌 임의의 문자(\D)를 ''로 치환해주는 방법이죠.
정규 표현식 상세 : http://php.net/manual/kr/regexp.reference.php
정규 표현식 : http://php.net/manual/en/reference.pcre ··· ntax.php
임의의 10진 숫자는 \d로 표현합니다. 또는 [0-9]로 표현하죠.
여기에 부정 클래스를 사용하면 반대가 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$date = preg_replace('/[^0-9]/','',$date);
$date = preg_replace('/[^\d]/','',$date);
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
preg_replace() : http://php.net/manual/kr/function.preg-replace.php
참 고로 ereg_replace(), eregi_replace() 등 POSIX Regex 관련 함수들은
PHP 5.3 버전부터 중지됩니다.
POSIX Regex 관련 함수 : http://php.net/manual/kr/ref.regex.php
그러니 어서 펄 호환 정규식으로 갈아타시길···.
Regular Expressions (Perl-Compatible) : http://php.net/manual/kr/book.pcre.php
■ 정규식 처리 #2
숫자만 뽑아 묶어주는 방법입니다.
────────────────────────────────────────
preg_match_all('/\d/',$date,$matches);
$date = implode('',$matches[0]);
────────────────────────────────────────
위 와 같이 실행했을 때 $matches의 값입니다.
문자열 처리 과정에서 언급한 implode() 함수로 깔끔하게 묶어주면 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Array
(
[0] => Array
(
[0] => 2
[1] => 0
[2] => 1
[3] => 0
[4] => 0
[5] => 4
[6] => 2
[7] => 0
)
)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
preg_match_all() : http://php.net/manual/kr/function.preg-match-all.php
■ 정규식 처리 #3
preg_split() 함수로 대놓고 년, 월, 일로 잘라줘도 됩니다.
────────────────────────────────────────
list($y,$m,$d) = preg_split('/년|월|일/',$date);
$date = $y.$m.$d;
────────────────────────────────────────
preg_split() : http://php.net/manual/kr/function.preg-split.php
차근차근 읽어본 경우라면 위 두 줄의 코드를 한 줄로 바꿀 수 있겠죠?
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$date = implode('',preg_split('/년|월|일/',$date));
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
■ 정규식 처리 #4
#1의 코드와 기본은 같고 메타 문자만 다릅니다.
────────────────────────────────────────
$date = preg_replace('/\W/','',$date);
────────────────────────────────────────
어떠한 문자나 숫자, _가 \w며, \W는 그 반대입니다.
특성이 있지만, 년, 월, 일 정도야···. ^^);;;
■ 정규식 처리 #5
preg_grep()의 활용 예를 위해 하나 더 추가합니다.
str_split() 함수와 마찬가지로 잘라주고, 숫자 부분만 가져다 묶어줍니다.
────────────────────────────────────────
$split = preg_split('//',$date,-1,PREG_SPLIT_NO_EMPTY);
$date = implode('',preg_grep('/\d/',$split));
────────────────────────────────────────
preg_grep() : http://php.net/manual/kr/function.preg-grep.php
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
$date = implode('',preg_grep('/\d/',preg_split('/()/',$date,-1,PREG_SPLIT_NO_EMPTY)));
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
■ 정규식 처리 #6
#2 에서 preg_match_all()을 사용했죠? 이번에는 preg_match() 사용입니다.
────────────────────────────────────────
preg_match('/(\d+)년(\d+)월(\d+)일/',$date,$match);
$date = implode('',array_slice($match,1));
────────────────────────────────────────
$match의 값은 아래와 같습니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Array
(
[0] => 2010년04월20일
[1] => 2010
[2] => 04
[3] => 20
)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
여기서 array_slice() 함수를 이용해 두 번째 배열부터 가져와 묶어줍니다.
문자열의 substr() 함수와 사용 방법이 같습니다. 대상만 배열이죠.
preg_match() : http://php.net/manual/kr/function.preg-match.php
array_slice() : http://php.net/manual/kr/function.array-slice.php
■ 정규식 처리 #7
응용 예입니다.
────────────────────────────────────────
preg_match('/(\d+)(\W.)(\d+)(\W.)(\d+)(\W.)/',$date,$matches);
$date = $matches[1].$matches[3].$matches[5];
────────────────────────────────────────
$matches 값은 아래와 같습니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Array
(
[0] => 2010년04월20일
[1] => 2010
[2] => 년
[3] => 04
[4] => 월
[5] => 20
[6] => 일
)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
▣ 날짜 함수 이용
문자열 처리 응용, strtotime() 함수와 date() 함수가 등장합니다.
년, 월, 일을 제거하면 그것으로 끝이지만 응용 차원에서 추가했습니다.
참. 꼭 -으로 바꿀 필요는 없습니다.
────────────────────────────────────────
$date = str_replace('년','-',$date); // 2010-04월20일
$date = str_replace('월','-',$date); // 2010-04-20일
$date = str_replace('일','',$date); // 2010-04-20
$date = date('Ymd',strtotime($date));
────────────────────────────────────────
strtotime() : http://php.net/manual/en/function.strtotime.php
date() : http://php.net/manual/kr/function.date.php
한 줄로 줄이려면? 문자열 처리 #3에서 언급한 strtr()을 사용하면 됩니다.
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
echo date('Ymd',strtotime(strtr($date,array('년'=>'/','월'=>'/','일'=> ''))));
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
출처: https://openbee.kr/264 [오픈비 : 삽질은없다]
- 이전글마우스 오버 이미지 배너 만들기(CSS, 자바스크립트 등) 21.02.22
- 다음글mysql을 mysqli로 바꾸는 방법 21.02.22
댓글목록
등록된 댓글이 없습니다.

