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

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

QA

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

답변 2

본문

고객이 무통장입금을 통해 주문을 해서 현금영수증을 발급하려고 주문상세정보 페이지의 현금영수증 란의 현금영수증 발행 팝업을 띄워 정보 입력했고 등록요청 버튼을 클릭해서 결과코드 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 함수는 보안을 위해서 반드시 사용해야 합니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 674
© SIRSOFT
현재 페이지 제일 처음으로