반응형

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="javascript">
<!--
var strLen;
function FFGetByteLength( obj ) {
    var msg = obj.value;
    var str = new String(msg);
    var len = str.length;
    var count = 0;
    for (k=0 ; k<len ; k++) {
        temp = str.charAt(k);

        if (escape(temp).length > 4) {
            count += 2;
        } else if (temp == '\r' && str.charAt(k+1) == '\n') { // \r\n일 경우
            count += 2;
        } else if (temp != '\n') {
            count++;
        }


        if ( count > 3000 ){
            strLen = k;
            break;
        }
    }
    return count;   
}

 

// 호출 method
function checkLength(formName) {

    alert (FFGetByteLength(document.all[formName].user_input));

     if ( FFGetByteLength(document.all[formName].user_input) > 3000){
     alert("메시지의 길이는 3000byte 이내여야 합니다.");
    tmpStr = document.all[formName].user_input.value.substring(0, strLen);
    document.all[formName].user_input.value = tmpStr;}
}
</script>

</HEAD>

 

<BODY>
<FORM METHOD=POST ACTION="" name='aa'>
<TEXTAREA NAME="user_input" ROWS="5" COLS="20"></TEXTAREA>
<INPUT TYPE="button"  onClick="checkLength('aa')" value="몇 Byte?">
</FORM>
</BODY>
</HTML>

반응형

'프로그래밍 > JAVASCRIPT' 카테고리의 다른 글

[JAVA SCRIPT] WINDOW.OPEN  (0) 2010.09.01
브라우저 정보 알아오기.  (0) 2010.07.20
Textarea 글자수제한.  (0) 2010.07.13
스크립트로 이미지 사이즈를 조정  (0) 2010.07.12
escape메서드  (0) 2010.07.07
반응형


<HTML>
 <HEAD>
  <TITLE>javascript exam</TITLE>
  <SCRIPT language="javascript" type="text/javascript">
  //<![CDATA[
    function fc_chk_byte(aro_name,ari_max) {
      var ls_str = aro_name.value;
      var li_str_len = ls_str.length;
      var li_max = ari_max;
      var i = li_byte = li_len = 0;
      var ls_one_char = ls_str2 = "";
      for(i=0; i< li_str_len; i++) {
        ls_one_char = escape(ls_str.charAt(i));

        if( ls_one_char.length == 1 ) li_byte++;
        else if( ls_one_char.indexOf("%u") != -1 )  li_byte += 2;//Db가 한글을 3byte로 인식하여 2->3
        else if( ls_one_char.indexOf("%") != -1 ) li_byte += ls_one_char.length/3;

  if(li_byte <= li_max){
   li_len = li_byte;
  }
      }

      if(li_byte > li_max) {
        alert( li_max + "byte, 초과 ");
        ls_str2 = ls_str.substr(0, li_len);
        aro_name.value = ls_str2;
        document.sms.char_byte.value = 3000;
      }else {
        document.sms.char_byte.value = li_byte;
      }
      aro_name.focus();
    }
  //]]>
  </SCRIPT>
 </HEAD>

 <BODY>
  <FORM METHOD=POST name="sms">
    <TEXTAREA NAME="txta" ROWS="12" COLS="52" onkeyup="fc_chk_byte(this, 3000)"></TEXTAREA>
    <br />
    <input type="text" size="4" name="char_byte" id="char_byte" readonly> / 3000 byte
    <input type="button" value="send" onclick="alert(document.sms.txta.value)" />
  </FORM>
 </BODY>
</HTML>

영문은 1byte로 한글은 2byte로 마춰져있다.
현재는 3000으로 마춰져있지만 fc_chk_byte(this, 3000) <-- 여기서 3000 을 자신이 원하는 수로 변경을 하면 수정이 가능하다.

반응형
반응형
function Shorten_String($String, $MaxLen, $ShortenStr) {
/*
2 바이트 문자를 깨끗하게 잘라주는 함수
인자로는 자를 문자열($String), 최대 길이($MaxLen),
말줄임표(보통 ... 을 사용)($ShortenStr)를 받는다.
원리는 문자열의 처음부터시작하여 이것이 2바이트문자이면(127보다크면)
자를 문자열의 길이를 2를 증가시키고 그렇지않으면 1을 증가시킨다.
이렇게 하여 마지막에 원래의 문자열에서 자를 문자열의 길이만큼을
시작점(0)에서 잘라주면 된다.
*/
$StringLen = strlen($String); // 원래 문자열의 길이를 구함
$EffectLen = $MaxLen - strlen($ShortenStr);
// 최대문자열의 길이에서 말줄임표문자열의 길이를 뺀다
if ( $StringLen < $MaxLen )return $String;
// 원래문자열의 길이가 최대문자열의 길이보다 작으면 그냥 리턴한다.

for ($i = 0; $i <= $EffectLen; $i++) {
$LastStr = substr($String, $i, 1);
if ( ord($LastStr) > 127 ) $i++;
// 2바이트문자라고 생각되면 $i를 1을 더 증가시켜
// 결국은 2가 증가하게 된다.
// 다음에 오는 1바이트는 당연 지금 바이트의 문자에 귀속되는 문자이다.
}
$RetStr = substr($String, 0, $i);
// 위에서 구한 문자열의 길이만큼으로 자른다.
return $RetStr .= $ShortenStr;
// 여기에 말줄임문자를 붙여서 리턴해준다.
}

$str=Shorten_String($str,16,'...');


반응형

'프로그래밍 > PHP' 카테고리의 다른 글

[PHP] date()함수 날짜 계산  (0) 2010.11.11
[PHP] 파일업로드  (0) 2010.08.27
[PHP] 소수점 계산  (0) 2010.08.12
[PHP] 문자를 특정 위치로 부터 일정 길이까지 자르기. substr()  (0) 2010.08.06
문자 자르기.  (0) 2010.07.12

+ Recent posts