LARAVEL

[PHP] substr 대신 mb_substr을 사용하는 이유

litzoo 2024. 11. 20. 16:51

substr을 사용하다보면 ��� 이렇게 데이터가 깨질때가 있다

이는 인코딩 문제로 인해 올바르게 처리되지 않을 때 나타나는 문자이다

 

선요약!!

요약

  • 문제: substr()로 멀티바이트 문자(한글)를 처리하면 깨진 데이터(��)가 출력됩니다.
  • 해결: mb_substr()를 사용하여 멀티바이트 문자를 올바르게 처리하세요.

출처 https://freedesignfile.com/691681-cut-text-effect-editable-vector/

원인 분석

  1. 데이터베이스 인코딩 문제
    • $list->lk_name_kr에 저장된 데이터가 잘못된 문자 인코딩(예: UTF-8이 아닌 EUC-KR 등)일 수 있습니다.
    • PHP에서 substr()은 바이트 단위로 문자열을 잘라내기 때문에, 멀티바이트 문자(예: 한글)가 잘려서 깨진 결과를 초래할 수 있습니다.
  2. PHP와 데이터베이스의 인코딩 불일치
    • PHP 코드와 데이터베이스 간의 인코딩 설정이 다르면 문자열이 잘못 해석될 수 있습니다.

 

해결 방법

1. mb_substr를 사용 (멀티바이트 문자 처리)

mb_substr()은 멀티바이트 문자를 안전하게 다룰 수 있습니다.

$name = mb_substr('김감자', 0, 1, 'UTF-8') === '김' 
? mb_substr('김감자', -1, 1, 'UTF-8') 
: '김감자';
echo $name;​

2. 데이터 인코딩 확인

  • 데이터베이스와 PHP 코드가 동일한 인코딩을 사용하고 있는지 확인하세요:
    • 데이터베이스: utf8mb4 또는 utf8 설정인지 확인.
    • PHP: mb_internal_encoding('UTF-8');로 내부 인코딩 확인.

3. PHP 파일 인코딩

  • PHP 파일의 인코딩이 UTF-8인지 확인하세요. UTF-8이 아니면 한글 처리가 깨질 수 있습니다.
728x90
반응형