엑셀에서 CSV 텍스트 파일 UTF-8 한글 보이도록 저장하는 방법 > PHP
PHP

엑셀에서 CSV 텍스트 파일 UTF-8 한글 보이도록 저장하는 방법

조회 321회 댓글 0건
  • 현재 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기

결론 부터 말하면 utf-8이 아니라 utf-8 bom을 사용하면 됩니다.

방법은 아래와 같이 무척 간단하게 맢에 붙여 주기만 하면 엑셀에서 csv파일 열였을때 cp949가 아니라 utf-8일때도 한글 잘 보입니다.

utf-8과 utf-8 bom은 호환되기 때문에 파일의 헤더부분에 utf-8 bom 이라고 표시만 해주면 되는 방식 입니다.



 



    // UTF-8 BOM 추가 (엑셀에서 한글 인식용)
    $utf8_bom            = "\xEF\xBB\xBF";
    $wrtSize             = file_put_contents($wrtFile, $utf8_bom . $csvDataH);
 


utf-8만 지원하는 에디터에서도 잘 보이고 엑셀 프로그램에서 csv파일 읽었을때 잘 보이는 방식 입니다.



    /**
     * UTF-8 BOM을 추가하여 CSV 파일을 생성하는 함수 (엑셀 한글 인식용)
     *
     * @param string $filePath 저장할 파일 경로
     * @param string $csvData CSV 데이터 내용
     * @return int|false 쓰여진 바이트 수 또는 실패시 false
     */
    function writeCSVWithBOM( string $filePath, string $csvData) : int|false
    {
        $utf8_bom = "\xEF\xBB\xBF";
        return file_put_contents($filePath, $utf8_bom . $csvData);
    }
   

    /**
     * 배열 데이터를 UTF-8 BOM이 포함된 CSV 파일로 저장하는 함수
     *
     * @param string $filePath 저장할 파일 경로
     * @param array $a CSV로 변환할 2차원 배열
     * @param string $delimiter 구분자 (기본값: 쉼표)
     * @param string $enclosure 감싸는 문자 (기본값: 큰따옴표)
     * @return int|false 쓰여진 바이트 수 또는 실패시 false
     */
    function arrayToCSVWithBOM( string $filePath, array $a, string $delimiter = ',', string $enclosure = '"') : int|false
    {
        $utf8_bom   = "\xEF\xBB\xBF";
        $output     = fopen('php://temp', 'r+');

        foreach ($a as $row) {
            fputcsv($output, $row, $delimiter, $enclosure);
        }

        rewind($output);
        $csvData = stream_get_contents($output);
        fclose($output);

        return file_put_contents($filePath, $utf8_bom . $csvData);
    }

    // 사용 예시
    // 1. 문자열 데이터로 CSV 파일 생성
    $csvContent = "이름,나이,직업\n홍길동,30,개발자\n김영희,25,디자이너\n";
    $result     = writeCSVWithBOM('output.csv', $csvContent);


    // 2. 배열 데이터로 CSV 파일 생성
    $a = [
        ['이름', '나이', '직업'],
        ['김영희', 25, '디자인'],
        ['박철수', 35, '기획자']
    ];
    $result = arrayToCSVWithBOM('array_output.csv', $a);

 




* 같이보면 좋은글

  - 캐릭터셋 구분함수 utf8 bom euckr cp949 > PHP

  - 윈도우 CMD와 엑셀에서 CSV 텍스트파일 읽을때의 캐릭터셋 


  • 현재 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기
전체 236건 1 페이지
  • profile_image OP캐쉬 사용하면 괜찮아 보다는 저 같은 경우는 사용하지 않아도 괜찮아를 더 좋아 합니다.▷ 솔리드 캐시(SOLID CACHE)란?솔리드 캐시는 간단히 말해 "비싼 RAM(REDIS) 대신 저렴하고 넉넉한 디스크(DB)에 캐시를 저장하는 전략"으로 원래 루비 온 레일즈(RUBY ON RAILS) 커뮤니티에서 제안된 방식이지만 본질은 어떤 언어에서든 적용 가능한 실용적인 캐싱 철학임.▷ 핵심 철학: "ssd는 생각보다 훨씬 빠르다"과거에는 디스크가 너무 느려서 무조건 데이터를 ram(REDIS MEMCACHED)에 올려야 했지만 지금은 nvme ssd 같은 초고속 저장 장치가 보편화되었습니다. 굳이 복잡하게 별도의 메모리…
  • profile_image MyISAM은 SELECT가 빠르고 InnoDB는 느리다그런 경우도 있고 아닌 경우도 있기 때문에 어떤 용도로 사용하느냐에 따라서 다를 수 있습니다.그리고 처음 데이터 넣은 다음 select만 90% 이상이고 테이블 사용이 업데이트나 인서트는 적은 경우인지 불특정 다수에게 서비스 하기 때문에 불특정한 row를 가져와서 보여줘야 하는것인지에 다를 수 있는 것입니다. 가장 큰 차이: 데이터와 인덱스 구조→ MyISAM  - 데이터 파일(.MYD) 과 인덱스 파일(.MYI) 이 분리됨  - 인덱스 → 데이터 파일을 다시 읽는 구조  - 동작흐름: PK 인덱스 탐색 (.MYI) -> 데이터 위치…
  • profile_image 데이터베이스를 사용하다 보면 이미 존재하는 데이터인지 확인한 후 INSERT 또는 UPDATE를 해야 하는 상황을 자주 만나게 됩니다.이때 매우 유용한 문법이 바로 INSERT ... ON DUPLICATE KEY UPDATE입니다.즉, 쿼리 한번으로 해결 된다는 의미 인데 아무곳에서나 사용 가능한것은 아니고 키 중복이 발생하는 부분에서만 사용 하는 것입니다.그렇기 때문에 unique의 특성을 모르시는 분은 사용 하면 안되겠지요.  장점- 쿼리 수 감소: SELECT → INSERT/UPDATE 두 번 쿼리 날릴 필요 없음- 동시성 문제 감소: SELECT 후 INSERT 방식보다 Race Condition 발…
  • profile_image 웹서버에 접근하는 X-Forwarded-For란?X-Forwarded-For(XFF)는 HTTP 헤더로 클라이언트가 프록시나 로드 밸런서를 거쳐 웹 서버에 접속할 때 원래 클라이언트의 IP 주소를 식별하기 위해 사용 됩니다.로그밸런스도 프록시서버의 변형된 형태가 있기 때문에 쉽게 프록시 서버라고 생각을 하면 쉽습니다.일반적으로 웹 서버는 직접 연결된 IP만 볼 수 있는데 프록시 뒤에 있으면 프록시 서버의 IP만 보이게 되는데 이런 경우 XFF 헤더가 실제 사용자 IP를 전달하는 역할을 합니다. ▷ 헤더 형식X-Forwarded-For: 클라이언트IP 프록시1 프록시2 ...여러 프록시를 거치면 쉼표로 구분되어 …
  • profile_image ifconfig는 초기 한번 정도만 사용하고 interface configuration의 약자로 리눅스/유닉스 시스템에서 네트워크 인터페이스를 설정하고 확인하는 명령어입니다.▷ ifconfig 주요 용도1. 네트워크 인터페이스 정보 조회  - 현재 활성화된 네트워크 인터페이스 목록 확인  - 각 인터페이스의 IP 주소, MAC 주소, 서브넷 마스크 확인  - 네트워크 통계 정보 (전송/수신 패킷 수, 에러 등) 확인2. 네트워크 인터페이스 설정  - IP 주소 할당 및 변경  - 서브넷 마스크 설정  - 브로드캐스트 주소 설정  - MTU(Maximum Tr…
  • profile_image 결론부터 말하면 느리게 다운로드 처리 하는 방식에 대한 것입니다.왜? 느리게 다운로드가 필요한가 하면 지연을 시키면 트래픽이 평탄화 되는 효과가 있는데 갑자기 순간적으로 팍 튀는 그런 현상을 없애기 위해서 필욯나 방법중 하나 입니다. 원리는 간단하며 읽은 만큼 내보내고 약간 지연 시키는 방식 입니다.    /**     * 청크 단위로 지연시키면서 파일 다운로드 (대용량 파일용)     *     * @param string $filePath 다운로드할 파일 경로     * @param …
  • profile_image 쿠키를 너무 많이 생성하면 브라우저에 문제가 발생 할 수 있고 작동을 하지 않습니다.자동으로 초기화 해주면 좋은데 그렇지 않기 때문에 헤더에서 페이지 읽을때 마다 체크 해서 자동삭제 해주는 프로그램 있으면 문제가 발생 하지 않도록 할 수 있습니다. 아래는 어디에서 이런 문제가 발생 했는지 쿠키 이름이라도 저장하는 기능이 있으면 좋을텐데 그 부분은 빠져 있으니 필요하신 분은 간단한 작업이므로 넣으셔서 사용하시면 됩니다.  <?php  class CookieManager {      private $maxHeaderSize = 4096;  // 일반적인 헤…

상업적 이용 금지. 컨텐츠는 개인 용도로만 사용이 가능 합니다.