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
'programing' 카테고리의 다른 글
WordPress 데이터베이스의 어디에 게시된 이미지 링크가 저장됩니까? (0) | 2023.03.22 |
---|---|
@ConfigurationProperties 스프링 부팅 구성 주석 프로세서를 클래스 경로에서 찾을 수 없습니다. (0) | 2023.03.22 |
@DataJpaTest용 Spring Boot 1.4.1의 내장 H2 DB에 mode=syslog를 추가하는 방법은 무엇입니까? (0) | 2023.03.22 |
RefCursor 반환 유형을 사용하여 Oracle 저장 프로시저를 테스트하는 방법 (0) | 2023.03.17 |
배송 방법에 사용자 정의 설명 필드를 추가하는 방법(백엔드) (0) | 2023.03.17 |