영카트 KCP 현금영수증 발급신청시 한글깨짐 문제 문의

영카트 KCP 현금영수증 발급신청시 한글깨짐 문제 문의

QA

영카트 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값이 사라져버리는 현상이 있었습니다.

 

 

escapeshellarg 함수가 안전하지 못한 문자열을 지우기 때문에, escapeshellarg 함수를 써야 안전합니다.

setlocale(LC_CTYPE, 'ko_KR.euc-kr');

이렇게 했을때

echo setlocale(LC_CTYPE, 0);

출력이 ko_KR.euc-kr 이렇게 출력되어야 합니다.

이렇게 출력안되면 서버에 locales 과 locales-all 을 설치해야 합니다.

https://stackoverflow.com/questions/10909911/php-setlocale-has-no-effect

우분투의 경우 설치명령어 :
apt-get install -y locales locales-all

출력이 ko_KR.euc-kr 되는 환경이면,
escapeshellarg 함수를 써도 buyr_name, 과 good_name값이 사라지지 않습니다.

출력이 ko_KR.euc-kr 안되는 환경이면,
말씀하신대로 buyr_name, 과 good_name값이 필터링되서 사라집니다.

escapeshellarg 함수는 보안을 위해서 반드시 사용해야 합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 61
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT