'한글도 바이트단위로 처리하기'에 해당되는 글 1건

  1. 2010.01.05 한글도 바이트단위로 처리하기
반응형


출처 : http://jsguide.net/ver2/examples/index.php?mode=view&category=5&qstr=&uid=197&page=1


자바스크립트에서는 2바이트 문자를 한글자로 처리하기 때문에 바이트 단위로 잘라야 하거나 검사할때 문제가 많습니다.
그래서 바이트 단위로 길이를 검사하고 자르는 메소드를 추가해봤습니다.

서핑중에 sms 보내는 폼이 나오면... 혹시나하고 소스를 열어보곤 하는데.. ㅇ_ㅇ(힉..)
80바이트가 넘는지 검사하는걸 상당히 복잡하게 코딩해논게 보이더군요..
코드 나갑니다


<script>
 /**
 * string String::cut(int len)
 * 글자를 앞에서부터 원하는 바이트만큼 잘라 리턴합니다.
 * 한글의 경우 2바이트로 계산하며, 글자 중간에서 잘리지 않습니다.
 */
 String.prototype.cut = function(len) {
  var str = this;
  var l = 0;
  for (var i=0; i<str.length; i++) {
   l += (str.charCodeAt(i) > 128) ? 2 : 1;
   if (l > len) return str.substring(0,i) + "...";
  }
  return str;
 }

 /**
 * bool String::bytes(void)
 * 해당스트링의 바이트단위 길이를 리턴합니다. (기존의 length 속성은 2바이트 문자를 한글자로 간주합니다)
 */
 String.prototype.bytes = function() {
  var str = this;
  var l = 0;
  for (var i=0; i<str.length; i++) l += (str.charCodeAt(i) > 128) ? 2 : 1;
  return l;
 }

 aaa = "동a해b물c과 백두산이";
 alert(aaa.cut(15));

 // 또는

 bbb = "너무긴내용너무긴내용너무긴내용";

 alert("length: " + bbb.length + "\nbytes(): " + bbb.bytes());

 //응용

 if (bbb.bytes() > 20) {
  alert("내용이 너무 깁니다");
 } else {
  // 처리
 }
/* 여기서부터는 실행되지는 않습니다 ---

 // 다시응용 (sms폼에서 80바이트 넘는지 처리할경우)

 var sms = document.forms['폼이름'].elements['입력창'];
 if (sms.value.bytes() > 80) {
  alert('80바이트까지만 전송할 수 있습니다');
  sms.value = sms.value.cut(80);
 }
여기까지 실행되지 않습니다 */
</script>

Posted by 1010