Categories: PHP

[PHP] mail 내용 느낌표로 깨짐 현상 (한글 깨짐)


php mail() 함수를 사용할 때 body 내용에 일부 글자가 느낌표로 바뀌어 깨지는 현상이 발생할 때가 있습니다.

예 ) 안녕하세요. 반 ! 습니다.

원하는 한글 문자가 나오지 않고 ! 나 ? 등의 문자로 메일을 받게 되었다면 이렇게 해결해 주시면 됩니다.

php mail 내용 느낌표로 깨짐 문제 해결하기


먼저 해당 원인은 메일 콘텐츠의 내용이 1,000자가 넘어가게 되어 발생하는 문제입니다.

한글 문자가 깨지는 문제는 메일 헤더에 Content-Transfer-Encoding: base64 \r\n 을, 메일 내용을 담은 변수(content라고 가정)에는 chunk_split(base64_encode($content)) 와 같이 지정해주셔야 합니다.

아래 코드 예제로 위 코드가 적용되는 부분을 확인할 수 있습니다.

// 메일 헤더
$headers = "From: hello<do-not-reply@a.com>\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: base64\r\n";
// 메일 제목
$title = "메일 제목입니다.";
$title = "=?utf-8?B?".base64_encode($title)."?=\n";
// 메일 콘텐츠
$content = "<html lang='ko'><head><meta charset='utf-8'/></head><body><h1>Hello, World! 안녕하세요. 테스트입니다.</h1></body></html>";
// 메일 전송
mail("전송할 이메일 주소", $title, chunk_split(base64_encode($content)), $headers);

만약 이 방법으로도 해결되지 않는다면 메일 콘텐츠 내 head 태그에 <meta charset=’utf-8′ /> 을 추가하거나 메일 헤더에 \n 을 \r\n 으로 바꾸어 본 후에 다시 시도해보면 됩니다.

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

4주 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

4주 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

4주 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

4주 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago