영어, 일본어 또는 기타 언어로
키 포인트
다중 바이트 문자는 1 ~ 4 바이트를 사용하여 문자를 정의하는데, 이는 256 개 이상의 고유 한 문자를 가진 언어의 숫자 표현에 중요합니다. 유니 코드, 특히 UTF-8은 이러한 문자에 가장 일반적으로 사용되는 인코딩 체계입니다.
PHP 자체는 멀티 바이트 문자를 처리하도록 설계되지 않았습니다. 이러한 문자를 처리하려면 특수 함수 세트, MBString 함수를 사용해야합니다. 그러나 PHP의 HTTP 헤더에는 페이지의 메타 태그를 무시할 수있는 문자 세트 식별자도 포함되어 있습니다.
다중 바이트 지원은 PHP의 기본 기능이 아니며 재구성이 필요합니다. MB 기능을 활성화하려면 -enable-mbstring compile-time 옵션을 사용하고 런타임 구성 옵션 MBString-Encoding_Translation을 설정하십시오.
> 특정 인코딩 시퀀스가 유효한지 확인하는 데 사용되는 MB_Check_Encoding, MB_STRLEN 및 MB_EREG_SEARCH와 같은 PHP에서 여러 멀티 바이트 문자열 명령을 사용할 수 있습니다. 멀티 바이트 버전.
-
기본 사항 - 우리 모두 "비트"는 0 또는 1 일 수 있고 "바이트"는 8 개의 연속 비트의 조합입니다. 바이트에는 8 개의 이중 값 비트가 있기 때문에 바이트는 총 256 개의 다른 모드 (2의 8 번째 전력)로 구성 될 수 있습니다. 다른 문자는 가능한 각 8 비트 모드와 연관 될 수 있습니다. 이 바이트를 다른 순서로 정리하면 자신의 의사 소통 방식이 있습니다. 그것은 반드시 똑똑하지는 않지만, 누가 양쪽 끝에 있는지에 달려 있지만 의사 소통입니다. 256 개의 고유 한 캐릭터 이하의 언어로 캐릭터를 표현할 수있는 한 우리는 성공합니다. 그러나 256 자만으로 언어를 표현할 수 없다면 어떻게해야합니까? 아니면 같은 문서에서 여러 언어를 표현 해야하는 경우 어떻게해야합니까? 오늘날 우리가 찾을 수있는 모든 것을 디지털화 할 때 256자는 충분하지 않습니다. 다행히도이 도전을 더 잘 충족시키는 캐릭터 체계가 설계되었습니다. 이 새로운 수퍼 차저 세트는 1 ~ 4 바이트를 사용하여 문자를 정의합니다. 오늘날, 캐릭터 인코딩 분야의 큰 사람은 유니 코드이며, 이는 여러 바이트를 사용하여 문자를 나타내는 솔루션입니다. 유니 코드 컨소시엄에 의해 개발되었으며 UTF-32 (Dreadnaught Class Starship의 경우), UTF-16 (Star Trek : Dark Unbound의 Enterprise) 및 UTF-8 (대부분의 사람들은 실제로 사용해야합니다. 웹 애플리케이션을위한 세계). 내가 말했듯이 UNICODE (UTF-8 포함)는 여러 바이트 구성을 사용하여 문자를 나타냅니다. UTF-8은 1 ~ 4 바이트를 사용하여 1,112,064 개의 패턴을 생성하여 다른 문자를 나타냅니다. 이 "넓은 문자"는 더 많은 공간을 차지하지만 UTF-8은 다른 인코딩 체계보다 더 빨리 처리하는 경향이 있습니다. 모두가 UTF-8을 칭찬하는 이유는 무엇입니까? 이 중 일부는 ESPN 및 TCM에서 볼 수있는 UTF-8 지원 광고에서 강조된 인기있는 모델이지만, UTF-8은 ASCII를 모방하기 때문에 특수 문자가 포함되지 않으면 ASCII를 정확하게 추적하기 때문입니다.
이것이 PHP에 어떤 영향을 미칩니 까?
나는 당신이 무슨 생각을하고 있는지 알고 있습니다. 메타 태그에서 캐릭터를 "UTF-8"로 설정하면 모든 것이 괜찮을 것입니다. 그러나 이것은 사실이 아닙니다. 첫째, 간단한 사실은 PHP가 실제로 멀티 바이트 문자를 처리하도록 설계되지 않았으므로 표준 문자열 기능을 사용하여 이러한 문자에서 작동하면 불확실한 결과를 얻을 수 있습니다. 이러한 멀티 바이트 문자를 처리 해야하는 경우 특별한 기능 세트 인 MBString 함수를 사용해야합니다. 둘째, PHP를 제어하더라도 여전히 문제가있을 수 있습니다. 커뮤니케이션을 무시하는 HTTP 헤더에는 캐릭터 세트 아이덴티티가 포함되어있어 페이지 메타 태그의 내용을 무시합니다. 그렇다면 PHP는 다중 바이트 문자를 어떻게 처리합니까? 멀티 바이트 스트링에 영향을 미치는 두 가지 함수 세트가 있습니다. 첫 번째는 iconv입니다. 버전 5.0을 시작으로, 이것은 언어의 기본 부분이되었으며, 한 문자를 다른 문자 세트 표현으로 변환하는 방법입니다. 이것은 우리 가이 기사에서 논의 할 것이 아닙니다. 두 번째는 멀티 바이트 지원으로 "MB_"로 접두사 일련의 명령입니다. 이러한 명령이 많이 있으며, 빠른 검토에 따르면 일부 명령은 주어진 인코딩 체계를 기반으로 문자가 적절한 지 여부를 결정하는 것과 관련이 있으며, 다른 명령은 PHP 정규 표현식과 유사한 검색 지향 기능이지만 멀티 바이트 기능입니다.
php
다중 바이트 지원은 PHP의 기본 기능이 아니지만 추가 라이브러리 나 확장 장치를 다운로드 할 필요는 없습니다. 불행히도, 관리 된 PHP 버전을 사용하는 경우 이것은 할 수있는 일이 아닐 수도 있습니다. phpinfo () 함수를 사용하여 구성을보십시오. 아래로 스크롤하여 반쯤 출력하면 "MBString"이라는 섹션이 있습니다. 이것은 기본 기능이 활성화되어 있는지 여부를 보여줍니다. 이 기능을 활성화하는 방법에 대한 정보는 매뉴얼을 참조 할 수 있습니다. 요컨대 -enable-mbstring compile-time 옵션을 사용하여 MB 기능을 활성화하고 런타임 구성 옵션 MBString-Encoding_Translation을 설정할 수 있습니다. 물론, 최종 솔루션은 PHP 6입니다. IBM (모자를 꺼내십시오) ICU 라이브러리를 사용하여 멀티 바이트 문자 세트에 대한 기본 지원을 보장합니다. 우리가해야 할 일은 앉아서 기다리는 것뿐입니다. 그러나 그때까지, 지금 사용 가능한 멀티 바이트 지원을 확인하십시오.
다중 바이트 문자열 명령
53 개의 다른 멀티 바이트 문자열 명령이있을 수 있습니다. 54가있을 수 있습니다. 나는 어느 시점에서 약간 벗어 났지만, 당신은 내가 의미하는 바를 얻습니다. 말할 것도없이, 우리는 그것을 하나씩 설명하지는 않지만 재미를 위해 몇 가지를 빨리 살펴 보겠습니다.
MB_CHECK_ENCODING
mb_check_encoding () 함수는 특정 인코딩 시퀀스가 인코딩 체계에 유효한지 여부를 결정합니다. 함수는 문자열이 어떻게 인코딩되는지 (또는 어떤 체계가 작동 할 것인지)를 알려주지 않지만 지정된 체계에 작동하는지 여부를 알려줍니다.
PHP 매뉴얼에서 지원되는 인코딩 목록을 찾을 수 있습니다.
- mb_strlen
strlen () 함수는 문자열의 바이트 수를 반환합니다. 단일 바이트 인 ASCII의 경우 문자 수를 찾는 것이 좋습니다. 멀티 바이트 문자열의 경우 mb_strlen () 함수를 사용해야합니다.
MB_EREG_SEARCH <code class="language-php"><?php
$string = 'u4F60u597Du4E16u754C';
$string = json_decode('"' . $string . '"');
$valid = mb_check_encoding($string, 'UTF-8');
echo ($valid) ? 'valid' : 'invalid';
?></code>
- mb_ereg_search () 함수는 기존 문자 검색의 멀티 바이트 버전을 수행합니다. 그러나 일부 경고가 있습니다. MB_REGEX_ENCODING () 함수를 사용하여 인코딩 방식을 지정해야합니다. 정규 표현식에는 분리기가 없으며 (단지 패턴 부분 일뿐) 정규 표현식과 문자열은 MB_EREG_SEARCH_INIT ()를 사용하여 지정됩니다.
충분합니까?
나는 당신이 어떻게되는지 모르겠지만, 세상에는 더 간단한 것들이 필요하다고 생각합니다. 불행히도 멀티 바이트 처리는이 요구 사항을 충족하지 않습니다. 그러나 지금은 이것이 당신이 무시할 수없는 것입니다. 때로는 일반적인 PHP 문자열 처리를 수행 할 수 없습니다 (일반 ASCII 범위 (U 0000 - U 00ff)를 초과하는 문자를 처리하려고하기 때문입니다. 즉, MB_ 방향 함수를 사용해야합니다. 더 알고 싶습니까? 진지하게, 당신은 원하십니까? 나는 이것이 당신을 놀라게 할 것이라고 생각했습니다. 나는 이것에 대한 준비가되지 않았다. 내 시간이왔다. 최선의 선택은 무엇입니까? PHP 매뉴얼을 확인하십시오. 아, 뭔가 시도해. 실제로 무언가를 사용하는 경험을 대체 할 것이 없습니다.
(원래 FAQ 부품은 내용의 내용이 기사의 주제와 밀접한 관련이 있고 재 작성 후 가독성을 줄일 수 있기 때문에 여기에 유지되어야합니다.)
위 내용은 PHP 마스터 | 멀티 바이트 스트링으로 작업합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!