"UTF-8 한글 초성 추출 (PHP)"의 두 판 사이의 차이

28번째 줄: 28번째 줄:
       $cho_idx = $code / 588;       
       $cho_idx = $code / 588;       
       $result .= $cho[$cho_idx];
       $result .= $cho[$cho_idx];
    } else {
     }  
      // 만약 초성만 입력했을 경우에도 초성을 표시하도록.
        $result .= utf8_charAt($str, $i); 
     }
   }
   }
   return $result;
   return $result;
}
}


// 초성일 경우 true, 초성이 아닐 경우 false.
 
function isChosung($str){
return cho_hangul($str) == trim($str);
}


echo cho_hangul("안녕하세요");
echo cho_hangul("안녕하세요");
72번째 줄: 66번째 줄:
       $cho_idx = $code / 588;       
       $cho_idx = $code / 588;       
       $result .= $cho[$cho_idx];
       $result .= $cho[$cho_idx];
    }else {
      // 만약 초성만 입력했을 경우에도 초성을 표시하도록.
        $result .= utf8_charAt($str, $i); 
     }
     }
   }
   }
77번째 줄: 74번째 줄:
}
}


// 초성일 경우 true, 초성이 아닐 경우 false.
function isChosung($str){
return cho_hangul($str) == trim($str);
}
echo cho_hangul("안녕하세요");
echo cho_hangul("안녕하세요");
// ㅇㄴㅎㅅㅇ
// ㅇㄴㅎㅅㅇ

2021년 5월 19일 (수) 14:06 판

UTF-8 한글 초성 분리 (PHP)
PHP 한글 초성 검색
PHP cho_hangul 함수

1 소스코드 (Deprecated)

<?php
function utf8_strlen($str) { return mb_strlen($str, 'UTF-8'); }
function utf8_charAt($str, $num) { return mb_substr($str, $num, 1, 'UTF-8'); }
function utf8_ord($ch) {
  $len = strlen($ch);
  if($len <= 0) return false;
  $h = ord($ch{0});
  if ($h <= 0x7F) return $h;
  if ($h < 0xC2) return false;
  if ($h <= 0xDF && $len>1) return ($h & 0x1F) <<  6 | (ord($ch{1}) & 0x3F);
  if ($h <= 0xEF && $len>2) return ($h & 0x0F) << 12 | (ord($ch{1}) & 0x3F) << 6 | (ord($ch{2}) & 0x3F);          
  if ($h <= 0xF4 && $len>3) return ($h & 0x0F) << 18 | (ord($ch{1}) & 0x3F) << 12 | (ord($ch{2}) & 0x3F) << 6 | (ord($ch{3}) & 0x3F);
  return false;
}

function cho_hangul($str) {
  $cho = array("ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ");
  $result = "";
  for ($i=0; $i<utf8_strlen($str); $i++) {
    $code = utf8_ord(utf8_charAt($str, $i)) - 44032;
    if ($code > -1 && $code < 11172) {
      $cho_idx = $code / 588;      
      $result .= $cho[$cho_idx];
    } 
  }
  return $result;
}



echo cho_hangul("안녕하세요");
// Deprecated:  Array and string offset access syntax with curly braces is deprecated in [...][...] on line 12 
// ㅇㄴㅎㅅㅇ


2 소스코드 (수정)

<?php
function utf8_strlen($str) { return mb_strlen($str, 'UTF-8'); }
function utf8_charAt($str, $num) { return mb_substr($str, $num, 1, 'UTF-8'); }
function utf8_ord($ch) {
  $len = strlen($ch);
  if($len <= 0) return false;
  $h = ord($ch[0]);
  if ($h <= 0x7F) return $h;
  if ($h < 0xC2) return false;
  if ($h <= 0xDF && $len>1) return ($h & 0x1F) <<  6 | (ord($ch[1]) & 0x3F);
  if ($h <= 0xEF && $len>2) return ($h & 0x0F) << 12 | (ord($ch[1]) & 0x3F) << 6 | (ord($ch[2]) & 0x3F);          
  if ($h <= 0xF4 && $len>3) return ($h & 0x0F) << 18 | (ord($ch[1]) & 0x3F) << 12 | (ord($ch[2]) & 0x3F) << 6 | (ord($ch[3]) & 0x3F);
  return false;
}

function cho_hangul($str) {
  $cho = array("ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ");
  $result = "";
  for ($i=0; $i<utf8_strlen($str); $i++) {
    $code = utf8_ord(utf8_charAt($str, $i)) - 44032;
    if ($code > -1 && $code < 11172) {
      $cho_idx = $code / 588;      
      $result .= $cho[$cho_idx];
    }else {
       // 만약 초성만 입력했을 경우에도 초성을 표시하도록.
        $result .= utf8_charAt($str, $i);   
    }
  }
  return $result;
}

// 초성일 경우 true, 초성이 아닐 경우 false.
function isChosung($str){
	return cho_hangul($str) == trim($str);
}
echo cho_hangul("안녕하세요");
// ㅇㄴㅎㅅㅇ


3 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}