substr을 사용하다보면 ��� 이렇게 데이터가 깨질때가 있다
이는 인코딩 문제로 인해 올바르게 처리되지 않을 때 나타나는 문자이다
선요약!!
요약
- 문제: substr()로 멀티바이트 문자(한글)를 처리하면 깨진 데이터(��)가 출력됩니다.
- 해결: mb_substr()를 사용하여 멀티바이트 문자를 올바르게 처리하세요.
원인 분석
- 데이터베이스 인코딩 문제
- $list->lk_name_kr에 저장된 데이터가 잘못된 문자 인코딩(예: UTF-8이 아닌 EUC-KR 등)일 수 있습니다.
- PHP에서 substr()은 바이트 단위로 문자열을 잘라내기 때문에, 멀티바이트 문자(예: 한글)가 잘려서 깨진 결과를 초래할 수 있습니다.
- 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
반응형
'LARAVEL' 카테고리의 다른 글
[PHP] file 테이블 생성 및 데이터 삽입 (0) | 2024.11.26 |
---|---|
[PHP] JS에서 ajax로 보낸 data 보는 방법 (0) | 2024.11.25 |
[라라벨] @section('stlye')과 <style></style>의 차이 (0) | 2024.11.19 |
[PHP] NULL 널 병합 연산자(??, ||, !) (0) | 2024.11.14 |
[LARAVEL] 세션값으로 기존에 가려고 했던 URL 이동하기 (1) | 2024.11.07 |