[PHP] 텍스트 깨지는 경우(인코딩)

2023. 3. 10. 15:06·Development/PHP

보통은 한글이 깨지는 경우가 많은데, 영어도 인코딩이 깨졌다.

근데 이것저것 추가해봐도 잘안되서 챗GPT에게 질문하였다.

 

내가 시도한 것

1. 헤더에 인코딩 지정하기

header('Content-Type: text/html; charset=utf-8');

2. iconv 사용하기

iconv('iso-8859-1', 'UTF-8', $text);

 

그런데도 적용이 안되었다..

 

해결방안

첫번째 시도

  1. mb_internal_encoding('UTF-8');
  2. <meta charset="UTF-8">
  3. $text = iconv('ISO-8859-1', 'UTF-8', $text);

 

이미 기존에 시도했던 것들이다.

 

두번째 시도

원본 웹에서 인코딩을 확인했다.

 

UTF8과 iso-8859-1 로 되어있었다.

 

// 기존
$text = iconv('ISO-8859-1', 'UTF-8', $text);
// 변경
$text = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text);

 

3번째에 알려준 코드로 다시 시도하니까 정상 출력됐다. 알고보니 함수에 "//TRANSLIT" 옵션을 추가하면 iconv소스 텍스트에서 대상 인코딩에서 지원하지 않는 문자를 음역하도록 해주는 옵션이다.

해당 옵션을 사용하지 않으면 인코딩으로 표현할 수 없는 문자는 물음표 또는 기타 자리 표시자 문자로 대체되어 인코딩이 손실될 수 있다고 한다. 

주의할점

iso-8859-1 ISO-8859-1

인코딩이 소스 텍스트의 모든 문자를 지원하는지 확실하지 않은 경우에는 항상 "//TRANSLIT" 옵션을 사용하는 것이 좋다고 한다.

 

근데 수정 후 또 오류가 발생해서.. 다시 질문하러갔다.ㅠㅠ

 

 

BOM을 제거하기 위해 아래 코드를 추가하였다.

if (substr($text, 0, 3) == "\xef\xbb\xbf") {
	$text = substr($text, 3);
}
// Convert the text to UTF-8 encoding using iconv
$text = iconv('iso-8859-1', 'UTF-8//TRANSLIT', $text); // //TRANSLIT or //IGNORE.

하지만 여전히 되지않음..

 

1. 인코딩 확인 후 변경 완료

2. TRANSLIT , IGNORE 둘다 사용 (최종은 TRANSLIT으로 적용)

3. PHP 파일 인코딩 확인 및 변경

- 확인해보니 ANSI로 되어있었다.. UTF8로 변경하였다 ㅎ 이게 가장 큰 원인이였던 것 같다. (근데 왜 특정 부분만깨지냐고요?)

4. 데이터베이스 인코딩 설정 및 코드 추가

-원래도 있었음.

mysql_query ( 'set names utf8' );

5. 라이브러리 사용 x

잠깐 삽질했었는데 .. 아주 최고다..친절한 설명까지 이젠 챗지피티가 내 사수야

'Development > PHP' 카테고리의 다른 글

[PHP] 내가 작성한 코드 리팩토링 하기  (0) 2023.03.22
[PHP] DateTime:: Unexpected character 에러 해결하기  (0) 2023.03.20
[PHP] iconv 사용 시 텍스트가 잘릴 때  (0) 2023.01.26
openssl 연동의 늪(해결 완료)  (0) 2023.01.19
PHP Notice: Use of undefined constant  (0) 2023.01.18
'Development/PHP' 카테고리의 다른 글
  • [PHP] 내가 작성한 코드 리팩토링 하기
  • [PHP] DateTime:: Unexpected character 에러 해결하기
  • [PHP] iconv 사용 시 텍스트가 잘릴 때
  • openssl 연동의 늪(해결 완료)
곽진돔
곽진돔
Developer
  • 곽진돔
    echo "곽박한 세상";
    곽진돔
  • 전체
    오늘
    어제
    • 분류 전체보기 (185)
      • Development (170)
        • Linux (13)
        • k8s (3)
        • Docker (5)
        • AWS (1)
        • PHP (35)
        • Python (21)
        • Java (1)
        • SpringBoot (4)
        • JavaScript (1)
        • React (9)
        • MySql (19)
        • MongoDB (1)
      • Daily (4)
      • Study (6)
        • TIL (1)
        • license (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 설정
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    HTML
    docker
    스프링부트
    IP
    springboot
    리액트
    CentOS7
    UTF8
    리눅스
    JavaScript
    Java
    CentOS
    db
    윈도우
    Linux
    chromedriver
    ssh
    Python
    Selenium
    Shell
    정규표현식
    php
    MySQL
    error
    SQL
    인코딩
    date
    react
    nodejs
    크롤링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
곽진돔
[PHP] 텍스트 깨지는 경우(인코딩)
상단으로

티스토리툴바