반응형
개발환경이 PHP 7.4 미만 버전이라 mb_str_split 함수를 사용하지 못하는 경우입니다.
@UTF-8 파일에서 문자열을 순서대로 출력하려고 했는데 한글이 깨지는 오류를 만나 해결하는 과정입니다.
한글 깨지는 오류
$word = "한글테스트";
for ($i=0; $i < strlen($word); $i++) {
#echo $word[$i]. "<br>";
echo substr($word, $i, 1). "<br>";
}
substr() 함수를 사용해도, 주석된 코드를 사용해도 모두 한글이 깨집니다.
한글이 포함된 문자열을 순차대로 출력하려고 할 때 가공하지 않고 그대로 출력할 때는 문제가 되지 않습니다.
그러나 문자열에서 출력할 문자가 한글일 경우 해당 문자와 연산을 하려고 하면 한글이 깨지는 현상이 발생합니다.
해결 방법
strlen() -> mb_strlen()
strlen() 함수에서 한글은 1글자를 3글자로 인식합니다. 그래서 위의 출력 결과물의 반복이 의도한 것보다 더 많이 수행되었습니다.
그러므로 우선 한글이 포함된 문자열에서 정확한 길이를 가져오기 위해서는 mb_strlen() 을 사용합니다.
PHP: mb_strlen - Manualsubstr() -> iconv_substr()
iconv_substr() 함수를 사용해 해당 문자를 utf-8 로 지정할 수 있습니다.iconv_substr($word, $i, 1, 'utf-8');
이 함수를 활용하면 더 이상 한글이 깨지지 않습니다.
PHP: iconv_substr - Manual
전체 코드(오류 해결한 코드)
$word = "한글테스트";
for ($i=0; $i < strlen($word); $i++) {
echo iconv_substr($word, $i, 1, 'utf-8'). "<br>";
}
반응형
'Programming > PHP' 카테고리의 다른 글
리소스 직접 접근 차단하고 소스에서만 허용하기 (PHP + .htaccess) (0) | 2023.11.23 |
---|---|
PHP :: Cafe24 웹 호스팅 서버에서 SMTP 인증된 메일 발송하기 (0) | 2022.08.13 |
PHP 주말,공휴일 제외한 영업일(날짜) 구하기 (2) | 2021.12.23 |
PHP 암호화된 압축파일 해제 후 다운로드 (0) | 2021.12.20 |
PHP 압축파일에 암호화 후 다운로드 (0) | 2021.12.16 |