programing

PHP: strlen이 바이트 길이 대신 문자 길이를 반환합니다.

magicmemo 2023. 3. 22. 20:57
반응형

PHP: strlen이 바이트 길이 대신 문자 길이를 반환합니다.

나는 워드프레스 웹사이트를 가지고 있다.

다음과 같은 간단한 페이지 템플릿을 만들었습니다.

<?php 
 /**
 * Template Name: Test
 */

 echo strlen('Привет');

 ?>

그리고 이 템플릿을 사용하여 페이지를 만들었습니다.이 페이지에는 러시아 문자열 'Hello'의 길이가 표시됩니다.UTF-8 인코딩된 러시아 문자열은 6자로 구성되어야 하므로 12가 될 것으로 예상되지만 대신 6이 됩니다.

다른 서버에서도 같은 테스트를 했는데 12라는 정확한 값을 얻었어요.그 이유는 서버 구성 때문이라고 생각합니다.wp 3.2.1(wp 3.5.1로 업그레이드 후 같은 문제가 발생)과 PHP 5.3.3을 가지고 있습니다.

현재 저는 해결책을 찾기 위해 5일 정도 시간을 보냈지만, 운이 없습니다.그런 행동의 이유가 뭔지 아는 사람 있나요?

mbstring을 확인합니다.func_module 설정php.ini이 옵션을 사용하면 PHP는 strlen() 함수를 mb_stren()으로 덮어쓸 수 있습니다(다른 동등한 옵션도 마찬가지).로 인해 서버 의 불일치가 될 수 .

편집

문서 링크에서 인용:

함수 오버로드를 사용하려면 mbstring을 설정합니다.php.ini의 func_ini는 오버로드되는 함수의 카테고리를 지정하는 비트마스크의 조합을 나타내는 양의 값입니다.mail() 함수를 오버로드하려면 1로 설정해야 합니다.문자열 함수의 경우 2, 정규 표현 함수의 경우 4입니다.예를 들어 7로 설정하면 메일, 문자열 및 정규 표현 함수가 오버로드됩니다.

, 「」가 입니다.2 bit은 기본 함수가 함수는 mbstring 는 mbstring으로 오버로드됩니다.normal은 0으로 해야 .

http://lt.php.net/manual/en/function.mb-strlen.php에 접속해 보셨습니까?

int mb_strlen ( string $str [, string $encoding ] )
Gets the length of a string.

여기에는 멀티바이트 문자열 함수를 사용해야 합니까?http://www.php.net/manual/en/function.mb-strlen.php 등

멀티바이트 문자로 문자열 길이를 가져오는 방법에 대한 자세한 내용은 http://php.net/manual/en/function.mb-strlen.php 를 참조하십시오.

내 파일은 "UCS-2 BE BOM" 인코딩으로 설정되었습니다.(메모장++ - 인코딩 메뉴 옵션에서 볼 수 있습니다.)

다음으로 mb_stren($line)을 사용했습니다.UCS-2")의 기능은 어떠한 이유로 잘못된 문자열 길이를 취득하고 있었습니다(예를 들어 mb_stren("somestr", UCS-2") -> 6으로 상정하고 있었습니다).

파일의 인코딩을 「UTF-8」로 변경해, 올바른 문자열 길이를 얻을 수 있었습니다.

왜 다른 인코딩 타입과 문자열 길이가 맞지 않는지 모르겠지만, 나에게 맞는 것을 공유하고 싶었습니다.

언급URL : https://stackoverflow.com/questions/15342402/php-strlen-returns-character-length-instead-of-byte-length

반응형