영카트 KCP 현금영수증 발급신청시 한글깨짐 문제 문의
본문
고객이 무통장입금을 통해 주문을 해서 현금영수증을 발급하려고 주문상세정보 페이지의 현금영수증 란의 현금영수증 발행 팝업을 띄워 정보 입력했고 등록요청 버튼을 클릭해서 결과코드 0000, 결과메세지 정상처리로 나왔습니다.
(현금영수증 발행 팝업에서 input:hidden속성의 good_name, buyr_name의 value는 한글이 올바르게 출력되는것을 확인했습니다.)
KCP 상점관리자 현금영수증 등록내역조회 메뉴에는 등록이 되는 것을 확인했으나, 고객명, 상품명에 한글이 咀��), 膀潔트첵方품攬臍�550ml 7 이런 식으로 깨져서 나옵니다.
영카트 기능 중 현금영수증 발급부분인 /shop/taxsave_form.php, /shop/kcp 안의 폴더는 순정상태로 이용하고 있습니다.
KCP에 문의했더니 가맹점 측에서 전달 주시는 정보를 UTF-8로 주고 계시다면 EUC-KR로 인코딩 처리 진행하시어 요청을 부탁다는 답변을 받았습니다.
같은 현상 겪으신 분이 계신다면 어떻게 처리하셨는지 궁금합니다.
그누보드 버전은 아래와 같습니다.
define('G5_GNUBOARD_VER', '5.5.8.3.1');
define('G5_YOUNGCART_VER', '5.4.5.5.1');
서버 운영환경은 아래와 같습니다.
OS: Ubuntu 22.04.4 LTS
WEB: nginx 1.18.0 (ubuntu)
PHP: php 7.4.33 (fpm)
DB: mariadb 10.6.16 (캐릭터셋 utf8mb4)
답변 2
shop/kcp/pp_cli_hub.php 폴더에서 영수증 처리하는거 같은데
$buyr_name = iconv("utf-8", "cp949", $buyr_name);
$good_name = iconv("utf-8", "cp949", $good_name);
해서 처리가 되어 있네요 해당 파일에 해당 변수에 위 소스가 처리되어 있나 한번 확인해보셔야 할거 같습니다.
문제를 해결하여 처리내용 공유합니다.
서버에서 자동으로 처리되는 인코딩 문제로 의심되며, 서버쪽에서는 조치할 수 있는 방법을 찾지 못하여 프로그램 소스에서 아래와 같은 조치를 했습니다.
1. /shop/kcp/taxsave_form.php
form 태그에 accept-charset="euc-kr" 속성, 값 추가
2. /shop/kcp/pp.cli_lib.php
$buyr_name = iconv("utf-8", "cp949", $buyr_name);
$good_name = iconv("utf-8", "cp949", $good_name);
위 두줄 주석처리
3. /shop/kcp/pp_cli_hub_lib.php
mf_exec 함수 내용 수정
$exec_cmd .= " " . escapeshellarg( $i );
해당 부분을 아래와 같이 수정
$exec_cmd .= " " . $i;
escapeshellarg 함수를 제거한 이유는 1, 2대로 수정하고 escapeshellarg함수를 적용하면 buyr_name, 과 good_name값이 사라져버리는 현상이 있었습니다.