미채택 완료

파일에 한글로 기록을 한 뒤 기록을 보면 한글이 깨져있습니다.

2022-10-10 (월) 11:11:29 2,287

기초가 없으니 이런게 늘 문제네요

파일에 한글로 기록을 한 뒤 기록을 보면 한글이 깨져있습니다.

그래서 아래 코드로 테스트를 해보니 두가지 문제가 ...

Copy
<?php
echo $str = "테스트". date("Y-m-d H:i:s")."\n";
$f = fopen('utf8.txt' , 'a' ) ;
fwrite($f, iconv( 'EUC-KR' ,'UTF-8' ,"UTF-8".$str) );
fwrite($f, "default".$str);
fclose( $f ) ;
?>

<a href="utf8.txt" >보기</a>

위 코드를 실행한후 

1. 보기를 클릭해보면 아래처럼 깨져서 보입니다.

default�뚯뒪��2022-10-10 04:09:02

2. fwrite($f, iconv( 'EUC-KR' ,'UTF-8' ,"UTF-8".$str) );  이코드로는 데이타를 쓰질 못하네요

|

답변 6개 / 댓글 7개

2022-10-11 (화) 06:06:03

위 코드를 실행한후 

1. 보기를 클릭해보면 아래처럼 깨져서 보입니다

==

어떤 브라우저를 쓰셨나요?

IE 같은 경우 가끔 utf8을 euc-kr 로 인식하는 경우가 있습니 다.

답변에 대한 댓글 1개

2022-10-11 (화) 15:58:16
크롬이랑 엣지 둘다 해봤습니다.
2022-10-10 (월) 18:06:58

iconv() 빼고

그냥 fwrite() 해 보세요.

답변에 대한 댓글 1개

2022-10-10 (월) 19:53:54
본문 예제에 두가지 다 있습니다. 넣은거 뺀거
넣은건 아예 써지지도 않네요.
2022-10-10 (월) 16:11:22

3732213272_1665385709.8087.png

* 사진은 

   결과1 (t.php 실행)

   결과2 (보기클릭)

   소스 에디터

위 세개 창을 한개 이미지로 편집했습니다.

* 에디터 아래에 UTF-8 이렇게 써있으면 맞는건가요?

*  이제보니 시간이 오후4시인데 09시로 나오네요.. 뭔가 한글 깨지는거랑 관련이 있는가요?

답변에 대한 댓글 3개

시간대는 인코딩과 전혀 상관 없습니다.
TimeZone 설정을 확인하시면 될것 같고

파일 인코딩은 UTF-8 이 맞네요.
utf8.txt 파일을 편집기로 직접 열어보세요

메모장이나 Notepad++ 에서 깨지지 않고 잘보이면 저장자체는 문제가 없는거고
웹서버 응답 인코딩을 확인하셔야 합니다.
2022-10-10 (월) 19:56:49
직접열면 제대로 잘 써져있는게 확인됩니다.
응답 인코딩이란건 어찌 확인하나요
타임존 설정은 또 어떻게 확인하고 바꾸나요
그누보드에선 시간이 다 제대로 나오는데 저 파일에서 시간만 저러네요
타임존 설정은 그누관련 파일을 거치지 않았기 때문일거고
그누 타임설정 하는 부분을 참조하시면 됩니다.

응답인코딩은 다음을 참고해보세요.
https://httpd.apache.org/docs/current/en/mod/core.html#adddefaultcharset
OR
https://httpd.apache.org/docs/current/en/mod/mod_mime.html#addcharset
OR
https://httpd.apache.org/docs/current/mod/mod_autoindex.html#indexoptions
OR
[code]
<Files ~ "\.txt?$">
Header set Content-Type "text/html; charset=utf-8"
</Files>
[/code]
  • '보기' 말고 그냥 바로 출력되는 부분도 깨지나요?
  • t.php 파일의 저장 인코딩은 확인 하신건가요?

클릭시 txt 파일을 브라우저에서 출력해주는 부분은

각 기본 혹은 마임타입에 따라 웹서버 응답 인코딩 설정이 어떤가도 확인이 필요힙니다.

아니면 기본 EUC-KR 환경인것 같은데

UTF-8 부분을 모두 제거하고 EUC-KR 인코딩 형태로만 동작하게 확인도 해보세요

utf-8 인코딩을 사용하려면

파일의 저장 인코딩

파일이 웹브라우저에 내보내질때의 헤더 인코딩

모두 utf-8 하나로 통일해보세요

Copy
<?php
// header('Content-Type: text/html; charset=EUC-KR');
header('Content-Type: text/html; charset=UTF-8');

echo $str = "테스트". date("Y-m-d H:i:s")."\n";
$f = fopen('aa/utf8.txt' , 'a' ) ; 
fwrite($f, iconv( 'EUC-KR' ,'UTF-8' ,"UTF-8".$str) );
fwrite($f, "default".$str);
fclose( $f ) ; 
?>
<a href="aa/utf8.txt" >보기</a>

답변에 대한 댓글 1개

2022-10-10 (월) 14:08:57
이렇게 해도 마찮가지네요.
본문의 코드를 t.php 로 저장하고 브라우저에서 주소/t.php 한 뒤
'보기'를 클릭해보면 깨져서 나옵니다.

기록된것도 "default" 한줄만 기록되고요..
2022-10-10 (월) 12:42:05

서버( 올린 파일) character set은 무엇이고

파일에 저장할 character set은

원하시는 것이 어떻게 되나요?

답변에 대한 댓글 1개

2022-10-10 (월) 14:07:14
아무것도 없이 저 코드가 단데요...

전 단지 파일에 기록하고 그 기록된 글을 보고 싶은것 뿐이에요...

답변을 작성하려면 로그인이 필요합니다.