백엔드 개발 PHP 문제 PHP utf8을 유니코드로 변환하는 방법

PHP utf8을 유니코드로 변환하는 방법

Jul 18, 2020 am 09:29 AM
unicode utf8

php utf8을 유니코드로 변환하는 방법: 먼저 PHP 샘플 파일을 만든 다음 "utf8_str_to_unicode" 메소드를 정의한 다음 ord 및 dechex와 같은 함수를 통해 변환 기능을 구현합니다.

PHP utf8을 유니코드로 변환하는 방법

PHP는 유니코드와 Utf-8 인코딩의 상호변환을 구현합니다

최근에 유니코드 인코딩 변환을 사용해서 PHP의 라이브러리 함수를 확인해봤는데 함수를 못찾았습니다 문자열을 변환할 수 있는 유니코드 인코딩 및 디코딩! 글쎄, 찾을 수 없다면 직접 구현하십시오. . .

유니코드와 Utf-8 인코딩의 차이점

유니코드는 문자 집합이고 UTF-8은 유니코드 중 하나이며 둘 다 고정 길이이고 중국어의 경우 UTF-8은 가변입니다. 문자, 유니코드는 UTF-8보다 1바이트를 적게 차지합니다. 유니코드는 2바이트이고 UTF-8의 중국어 문자는 3바이트를 차지합니다.

UTF-8로 인코딩된 문자는 이론적으로 최대 6바이트까지 가능하지만 16비트 BMP(Basic Multilingual Plane) 문자는 최대 3바이트까지만 가능합니다. UTF-8 인코딩 테이블을 살펴보겠습니다.

U-00000000 - U-0000007F: 0xxxxxxx 
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx 
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
로그인 후 복사

xxx의 위치는 문자 인코딩 번호의 이진 표현으로 채워집니다. x가 오른쪽으로 갈수록 덜 특별한 의미를 갖습니다. 문자 인코딩 번호를 멀티바이트 문자열로 표현합니다. 다중 바이트 문자열에서 첫 번째 바이트 시작 부분의 "1" 수는 전체 문자열의 바이트 수입니다. 첫 번째 줄은 1바이트인 ASCII 인코딩과 호환되도록 0으로 시작하고, 두 번째 줄은 더블바이트 문자열, 세 번째 줄은 한자와 같은 3바이트입니다. (개인 생각: 사실 앞에 있는 1의 수를 단순히 바이트 수로 간주하면 됩니다.)

유니코드를 Utf-8로 변환하는 방법

유니코드를 UTF-8로 변환하려면 물론 꼭 알아야 합니다. 차이점이 정확히 무엇인가요? 유니코드의 인코딩이 어떻게 UTF-8로 변환되는지 살펴보겠습니다. UTF-8에서 문자의 바이트가 0x80(128)보다 작으면 1바이트를 차지하는 ASCII 문자이며 변환이 없습니다. UTF-8은 ASCII 인코딩과 호환되기 때문입니다. 유니코드에서 한자 "you"의 인코딩이 "u4F60"인 경우 100111101100000으로 바이너리로 변환한 후 UTF-8 방식에 따라 변환한다. 이진수는 유니코드 이진수에서 한 번에 6자리씩 가져올 수 있습니다. 예를 들어 위의 이진수는 아래 표시된 형식으로 꺼낼 수 있으며 이전 숫자는 형식에 따라 채워집니다. 8비트 미만은 0으로 채워집니다.

unicode: 100111101100000                   4F60
utf-8:    11100100,10111101,10100000       E4BDA0
로그인 후 복사

위에서 유니코드와 UTF-8의 변환을 직관적으로 볼 수 있습니다. 물론 UTF-8의 형식을 알고 나면 해당 위치에 넣는 역연산을 수행할 수도 있습니다. 형식에 따라 바이너리를 꺼내서 결과 유니코드 문자로 변환합니다(이 작업은 "변위"를 통해 완료할 수 있습니다). 예를 들어 위의 "you" 변환에서는 그 값이 0x800보다 크고 0x10000보다 작으므로 3바이트 저장소로 판단할 수 있습니다. 그러면 최상위 비트를 "12"비트만큼 오른쪽으로 이동해야 합니다. 3바이트 형식에 따르면 가장 높은 비트는 11100000(0xE0) 또는 (|)로 가장 높은 값을 얻습니다. 같은 방법으로 두 번째 자리도 "6" 비트만큼 오른쪽으로 이동하고, 가장 높은 자리와 두 번째 자리의 바이너리 값이 남게 되는데, 111111(0x3F)로 위치(&) 연산을 수행하면 계산할 수 있다. ), 11000000(0x80) 또는 (|)로 합산됩니다. 세 번째 비트를 이동할 필요가 없습니다. 마지막 6비트를 직접 가져온 다음(&와 111111(ox3F)) 11000000(0x80)을 OR(|)하면 됩니다.

Utf-8을 다시 유니코드로 되돌리는 방법

물론 UTF-8에서 유니코드로의 변환도 쉬프트 등을 통해 이루어집니다. 이는 UTF-8의 해당 위치에 있는 이진수를 추출하는 것입니다. 8 형식. 위의 예에서 "you"는 3바이트이므로 각 바이트를 높은 비트에서 낮은 비트까지 처리해야 합니다.

UTF-8에서 "당신"은 11100100,10111101,10100000입니다. 상위 비트부터 시작하여 첫 번째 바이트 11100100은 "0100"을 빼는 것입니다. 이는 매우 간단합니다. 11111(0x1F)과 AND(&)를 취하면 가장 높은 위치가 되어야 한다는 것을 알 수 있습니다. 매번 6자리 숫자를 사용하기 때문에 12번째 비트 이전이어야 합니다.

그래서 결과는 왼쪽으로 12비트 이동해야 하며, 이제 가장 높은 비트는 0100,000000,000000입니다. 두 번째 비트는 "111101"을 꺼내는 것이므로 두 번째 바이트 10111101과 111111(0x3F)만 AND(&)하면 됩니다. 결과를 왼쪽으로 6비트 이동하여 최상위 바이트 또는 (|)의 결과를 취하면 두 번째 비트가 완성되어 결과는 0100,111101,000000이 됩니다.

유추하자면 마지막 숫자는 111111(0x3F)과 직접 AND(&)된 다음 이전 결과와 OR(|)되어 결과 0100,111101,100000을 얻습니다.

PHP 코드 구현

/**
 * utf8字符转换成Unicode字符
 * @param  [type] $utf8_str Utf-8字符
 * @return [type]           Unicode字符
 */
function utf8_str_to_unicode($utf8_str) {
    $unicode = 0;
    $unicode = (ord($utf8_str[0]) & 0x1F) << 12;
    $unicode |= (ord($utf8_str[1]) & 0x3F) << 6;
    $unicode |= (ord($utf8_str[2]) & 0x3F);
    return dechex($unicode);
}
/**
 * Unicode字符转换成utf8字符
 * @param  [type] $unicode_str Unicode字符
 * @return [type]              Utf-8字符
 */
function unicode_to_utf8($unicode_str) {
    $utf8_str = &#39;&#39;;
    $code = intval(hexdec($unicode_str));
    //这里注意转换出来的code一定得是整形,这样才会正确的按位操作
    $ord_1 = decbin(0xe0 | ($code >> 12));
    $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
    $ord_3 = decbin(0x80 | ($code & 0x3f));
    $utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
    return $utf8_str;
}
로그인 후 복사

테스트했습니다

$utf8_str = &#39;我&#39;;
//这是汉字“你”的Unicode编码
$unicode_str = &#39;4f6b&#39;;
//输出 6211
echo utf8_str_to_unicode($utf8_str) . "<br/>";
//输出汉字“你”
echo unicode_str_to_utf8($unicode_str);
로그인 후 복사

위의 변환은 한자(큰 경우에는 ASCII가 아님) 테스트를 위한 것입니다. 왜냐하면 ASCII이면 계속해서 동일하기 때문입니다. 필요하지 않습니다. 너무 많은 노력이 필요합니다.

또한 이 두 기능은 간단하게 구현되었으며 단일 문자[완전한 utf8 문자 또는 완전한 유니코드 문자]의 변환만 지원합니다. 이해하면 원하는 만큼 확장할 수 있습니다. . .

추천: "PHP 튜토리얼"

위 내용은 PHP utf8을 유니코드로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

utf8로 인코딩된 중국어 문자는 몇 바이트를 차지합니까? utf8로 인코딩된 중국어 문자는 몇 바이트를 차지합니까? Feb 21, 2023 am 11:40 AM

UTF8로 인코딩된 한자는 3바이트를 차지합니다. UTF-8 인코딩에서는 한자 1개가 3바이트이고, 중국어 구두점 1개가 3바이트를 차지하는 반면, 유니코드 인코딩에서는 한자 1개(중국어 번체 포함)가 2바이트에 해당합니다. UTF-8은 각 문자를 인코딩하는 데 1~4바이트를 사용합니다. 하나의 US-ASCIl 문자는 인코딩하는 데 1바이트만 필요합니다. 발음 구별 부호가 있는 라틴어, 그리스어, 아르메니아어 및 기타 문자는 2바이트가 필요합니다. 부호화.

PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 Mar 05, 2024 pm 02:48 PM

PHP에 대한 심층적인 이해: JSONUnicode를 중국어로 변환하는 구현 방법 개발 중에 JSON 데이터를 처리해야 하는 상황이 자주 발생하며, JSON의 유니코드 인코딩은 일부 시나리오, 특히 변환해야 할 때 몇 가지 문제를 일으킬 수 있습니다. 유니코드 인코딩을 한자로 변환하는 경우입니다. PHP에는 이러한 변환 프로세스를 달성하는 데 도움이 되는 몇 가지 방법이 아래에 소개되고 구체적인 코드 예제가 제공됩니다. 먼저 JSON의 Un을 먼저 이해해 봅시다.

유니코드를 중국어로 변환하는 방법 유니코드를 중국어로 변환하는 방법 Dec 14, 2023 am 10:57 AM

유니코드는 다양한 언어와 기호를 표현하는 데 사용되는 문자 인코딩 표준입니다. 유니코드 인코딩을 중국어 문자로 변환하려면 Python의 내장 함수 chr() 및 ord()를 사용할 수 있습니다.

Eclipse에서 한자 깨짐 문제를 해결하는 방법을 시도해 보세요. Eclipse에서 한자 깨짐 문제를 해결하는 방법을 시도해 보세요. Jan 03, 2024 pm 05:28 PM

Eclipse에서 중국어 문자가 깨져서 고민이신가요? 이러한 솔루션을 시도하려면 구체적인 코드 예제가 필요합니다. 1. 배경 소개 컴퓨터 기술이 지속적으로 발전함에 따라 소프트웨어 개발에서 중국어의 역할이 점점 더 중요해지고 있습니다. 그러나 많은 개발자는 중국어 개발에 Eclipse를 사용할 때 잘못된 코드 문제에 직면하여 작업 효율성에 영향을 미칩니다. 그런 다음 이 기사에서는 몇 가지 일반적인 잘못된 코드 문제를 소개하고 독자가 Eclipse에서 중국어 잘못된 코드 문제를 해결하는 데 도움이 되는 해당 솔루션과 코드 예제를 제공합니다. 2. 일반적인 잘못된 코드 문제 및 솔루션 파일

PHP 튜토리얼: JSON 유니코드를 한자로 변환하는 방법 PHP 튜토리얼: JSON 유니코드를 한자로 변환하는 방법 Mar 05, 2024 pm 06:36 PM

JSON(JavaScriptObjectNotation)은 웹 애플리케이션 간의 데이터 교환에 일반적으로 사용되는 경량 데이터 교환 형식입니다. JSON 데이터를 처리할 때 유니코드로 인코딩된 중국어 문자(예: "u4e2du6587")를 자주 접하고 이를 읽을 수 있는 중국어 문자로 변환해야 합니다. PHP에서는 몇 가지 간단한 방법을 통해 이러한 변환을 수행할 수 있습니다. 다음으로 JSONUnico 변환 방법을 자세히 소개하겠습니다.

Java가 MySQL 데이터베이스에 연결할 때 일관되지 않은 유니코드 문자 집합 인코딩 문제를 해결합니다. Java가 MySQL 데이터베이스에 연결할 때 일관되지 않은 유니코드 문자 집합 인코딩 문제를 해결합니다. Jun 10, 2023 am 11:39 AM

빅데이터, 클라우드 컴퓨팅 등 기술의 발전으로 데이터베이스는 기업 정보화의 중요한 초석 중 하나가 되었습니다. Java로 개발된 애플리케이션에서는 MySQL 데이터베이스에 연결하는 것이 표준이 되었습니다. 그러나 이 과정에서 유니코드 문자 세트 인코딩이 일치하지 않는다는 까다로운 문제에 자주 직면합니다. 이는 개발 효율성에 영향을 미칠 뿐만 아니라 애플리케이션의 성능과 안정성에도 영향을 미칩니다. 이 기사에서는 이 문제를 해결하고 Java가 MySQL 데이터베이스에 보다 원활하게 연결되도록 하는 방법을 소개합니다. 1. 유니코드

유니코드와 ASCII의 차이점은 무엇입니까 유니코드와 ASCII의 차이점은 무엇입니까 Sep 06, 2023 am 11:56 AM

유니코드와 ASCII의 차이점에는 인코딩 범위, 저장 공간 및 호환성이 다릅니다. 자세한 소개: 1. 인코딩 범위는 다릅니다. ASCII의 인코딩 범위는 주로 영문자를 나타내는 데 사용됩니다. 유니코드의 인코딩 범위는 훨씬 더 넓으며 거의 ​​모든 언어 문자를 나타낼 수 있습니다. 공백은 다릅니다. ASCII는 일반적으로 문자를 저장하는 데 1바이트를 사용하는 반면, 유니코드는 문자를 저장하는 데 2바이트 이상을 사용할 수 있습니다.

노드 utf8 한자가 깨졌을 경우 어떻게 해야 할까요? 노드 utf8 한자가 깨졌을 경우 어떻게 해야 할까요? Feb 08, 2023 am 10:29 AM

노드 utf8에서 잘못된 중국어 문자에 대한 해결 방법: 1. "typeof"를 통해 "SarchName" 유형을 확인합니다. 2. "Name=iconv.decode(name,'gbk')"를 사용하여 인코딩을 utf8로 변환합니다.

See all articles