아래와 같은 구문이 html 화일안에 들어있습니다.
$('#svc-popup [data-type="svcDocumentList"] h1').html(ticket.product_name);
여기서 product_name이 다국어 변수(?) 인데, 실제 출력은 $user_lang->userLang20230514225506072 이런식으로 되고 있습니다. 어떻게 수정하는게 좋을까요?
(script 구문 밖에서는 <h3>{$ticket->product_name}</h3> 이렇게 입력되어 있고 정상 출력합니다.)
<script> function svcUseTicket(ticket_info) { var ticket = JSON.parse(atob(ticket_info)); $('#svc-popup').attr('data-ticket-srl', ticket.ticket_srl); $('#svc-popup [data-type="svcUseTicket"] h1').html(ticket.product_name); $('#svc-popup [data-type="svcUseTicket"] span').html('{$lang->cmd_period_of_use}: ' + ticket.period_of_use); $('#svc-popup .svc-popup-body').hide(); $('#svc-popup [data-type="svcUseTicket"]').show(); $('#svc-popup').fadeIn(150); } function svcDocumentList(ticket_info) { var ticket = JSON.parse(atob(ticket_info)); var documents = ticket.documents; $('#svc-popup').attr('data-ticket-srl', ticket.ticket_srl); $('#svc-popup [data-type="svcDocumentList"] h1').html(ticket.product_name); $('#svc-popup [data-type="svcDocumentList"] div').html(''); for (var i in documents) { var document = documents[i]; $('<a href="/' + document.document_srl + '"><b>' + document.title + '</b><span>' + document.regdate + '</span></a>').appendTo('#svc-popup [data-type="svcDocumentList"] div'); } $('#svc-popup .svc-popup-body').hide(); $('#svc-popup [data-type="svcDocumentList"]').show(); $('#svc-popup').fadeIn(150); } $('.svc-popup-body[data-type="svcUseTicket"] button').on('click', function() { exec_json('hotopay.procHotopayActiveTicket', { ticket_srl: $('#svc-popup').attr('data-ticket-srl') }, function(data) { location.reload(); }, function(data) { location.reload(); }); }); </script>
자바스크립트에서 사용하는 ticket_info라는 변수는 어디에서 가져오는 것인지 모르겠지만, 이걸 처음 생성할 때부터 다국어 내용을 변환한 상태로 전달해야 할 것 같습니다. JSON.parse와 atob가 들어가는 것으로 보아, 뭔가 좀 특이하게 인코딩해서 전달하는 것 같거든요. 그렇게 인코딩해 놓은 내용은 코어에서 자동으로 변환해줄 수가 없어요.
예를 들어
var ticket_info = '{이상한인코딩($ticket)}';
이런 식으로 PHP에서 JS로 변수를 전달하고 있다면, 전달하기 전에 미리
$ticket->product_name = Context::replaceUserLang($ticket->product_name);
이렇게 변환해서 전달하면 됩니다.