티스토리 뷰
가끔 규격에 맞춰 데이터를 출력하려 할때 각 컬럼의 구간길이 만큼 공백을 채워야 하는 경우가 발생한다.
이번에 판매대행자료를 출력하는데, 공기관에서 다음과 같은 형태의 자료를 요청을 한다..
HD20154129201601311234567890테스트 2015100120151231
RD20154123456789000000011234567890*************홍길동 26203 201510 00000400000000000000000000000000060000000000000006000026203 010255555057 0101234525aa@koramgame.com A
RD20154123456789000000021234567890*************홍길동 26203 201510 00000300000000000000000000000000009900000000000000990026203 010255555057 0101234525aa@koramgame.com C
RD20154123456789000000031234567890*************홍길동 71455 201510 00000100000000000000000000000000002200000000000000220071455 010255555909 0101234502aamin_exe@kr.chu.com C
RD20154123456789000000041234567890*************홍길동 16086 201510 00008100000000000000000000000000053460000000000005346016086 010255555337 0101234537aalp@ktmusic.co.kr A
RD20154123456789000000011234567890*************홍길동 71455 201511 00000200000000000000000000000000004400000000000000440071455 010255555909 0101234502aamin_exe@kr.chukong.com C
RD20154123456789000000021234567890*************홍길동 16086 201511 00008600000000000000000000000000056760000000000005676016086 010255555337 0101234537aalp@music.co.kr A
RD20154123456789000000011234567890*************홍길동 16086 201512 00011300000000000000000000000000074580000000000007458016086 010255555337 0101275337aalp@music.co.kr A
TD201541234567890000000007000000290000000000000000000000000002613000000000000261300000018452000000015214520
이게 도대체 뭐임...
상호명과 함께 총 40바이트 길이를 맞춰야 하는데,
한글을 2byte 로 나머지는 공백으로 채워야 한다고 할 때.
한글 2바이트 계산이야 mb_strlen("굿바이", "euc-kr") 로 계산하면 되고
나머지 길이만큼 str_repeat(' ', 나머지 길이 ) 로 하면 되지 않을까~ 룰루랄라
$string = '굿바이';
$string_len = mb_strlen($string, 'euc-kr');
$string .= str_repeat(' ', 40-$string_len);
echo $string;
결과는?
눈에 보이는것에 속지말자 ㅠ HTML 상에서는 <pre>를 붙이지 않으면 중복된 공백이 무시된다.
소스보기하면 공백과 함께 보인다!
그런데 공백이 35개가 나온다.
왜일까?
결과가 6이다.
그렇다면 일반 strlen 으로는 어떻게 나올까?
아직 mb_strlen 이 왜 저렇게 나오는것인지 정확한 원인을 찾지는 못했지만
그냥 직접 만들기로 했다.
function mb_str_pad($input, $pad_length, $pad_string){
$strlen = strlen($input);
$hanlen = 0; $englen = 0;
for($i=0; $i<$strlen; $i++)
{
if(ord($input[$i]) > 127)
{
//한글 카운트
$hanlen++;
}
else
{
//한글 이외 문자 카운트
$englen++;
}
//echo "{$i}({$input[$i]}) : ". ord($input[$i])." <br/>";
}
$hanlen = ($hanlen / 3) * 2; //한글은 아스키코드 3자리로 나옴. * 한글은 2byte
$length=$hanlen + $englen;
return $input.str_repeat($pad_string, $pad_length - $length);
}
$aa = mb_str_pad("굿바이", 40, ' ');
echo $aa;
결과는 입력 한글 + 공백 34
'Develope > PHP' 카테고리의 다른 글
PHP D-Day 구하기 (0) | 2018.07.02 |
---|---|
PHP 비동기 처리하기 (2) | 2018.05.20 |
모바일 웹뷰를 빠르게 jquery.lazyload 적용하기 (0) | 2017.07.06 |
PHP 이메일 주소 유효성 체크하기 (0) | 2016.08.22 |
Javascript json_decode (0) | 2016.07.14 |
- Total
- Today
- Yesterday
- 엘라스틱서치
- xcode
- 리눅스
- swift
- 스위프트
- php
- object-C
- 아두이노
- 아이폰
- mysql
- 인공지능
- 서버
- 미세먼지
- Android
- 사물인터넷
- 파이썬
- Deeplearning
- 우분투
- Python
- ubuntu
- 캠핑
- diy
- 머신러닝
- ios
- 딥러닝
- IOT
- 라즈베리파이
- 공기청정기
- OpenCV
- 강좌
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |