"PHP와 MYSQL 배우기 - 문자 인코딩(1부)"에서는 유니코드와 UTF-8 간의 변환 관계를 소개하고, 이 인코딩 규칙을 기반으로 UTF-8 인코딩 구문 분석 프로그램을 요약합니다. , PHP 구현은 다음과 같습니다.
/*
프로그램 함수인 $str은 중국어와 영어가 혼합된 UTF-8 인코딩 문자열입니다.
UTF-8 인코딩 규칙에 따라 이 문자열을 올바르게 디코딩하고 표시합니다.
*/
$str = '오늘 너무 행복해서 KFC에 가서 콜라 치킨윙 먹기로 했어요!!!';
/*
$str은 차단됩니다 문자열
$len은 차단된 문자의 수입니다
*/
function utf8sub($str,$len) {
if($len <= 0) {
return '' ;
}
$offset = 0; // 상위 바이트 가로채기 시 오프셋
$chars = 0 // 가로채는 문자 수
$ res = '' ; // 가로챈 결과 문자열 저장
while($chars < $len){
// 문자열의 첫 번째 바이트를 먼저 가져옴
// 10진수로 변환
// 그런 다음 바이너리로 변환합니다
$high = ord(substr($str,$offset,1))
// echo '$high='.'< br />';
if($high == null ){ // 상위 비트가 null이면 끝까지 가져왔음을 증명하며 직접 중단합니다
break; >}
if( ($high>>2) === 0x3F){ // 상위 비트를 오른쪽으로 2비트 이동하여 바이너리 111111과 비교합니다. 같으면 6바이트를 가져옵니다
// 2바이트 가로채기
$count = 6;
}else if(($high>>3) === 0x1F){ // 상위 비트를 오른쪽으로 2비트 이동하고 비교합니다. 바이너리 11111을 사용합니다. 동일하면 5바이트를 가져옵니다.
// 3바이트를 가로채세요.
$count = 5
}else if(($high>>4) === 0xF) { // 상위 비트를 오른쪽으로 2비트 이동하고 이진수 1111과 비교합니다. 동일하면 4바이트를 가져옵니다.
// 4바이트를 가져옵니다.
$count = 4; 🎜>}else if(($high>>5) === 0x7){ // 상위 비트를 오른쪽으로 2비트 이동하고 이진수 111과 비교합니다. 동일하면 3바이트를 가져옵니다.
// 5바이트 가로채기
$count = 3;
}else if(($high> >6) === 0x3){ // 상위 비트를 오른쪽으로 2비트 이동하고 비교합니다. 바이너리 11이면 2바이트를 취합니다.
// 6바이트를 가로채세요
$count = 2
}else if(($high>>7) === 0x0){ // 상위 비트를 오른쪽으로 2비트 이동하고 이진수 0과 비교합니다. 동일하면 1바이트를 가져옵니다.
$count = 1
}
// echo '$count='. $count.'
';
$res .= substr($str,$offset,$count) / / 문자를 꺼내서 $res 문자열에 연결합니다
$chars += 1; // 가로채는 문자 수 + 1
$offset += $count; // 높은 오프셋을 가로채서 $count 바이트만큼 뒤로 이동합니다.
return $res; 🎜>}
echo utf8sub($str,100);