Я общаюсь с PHP через RFC, используя функцию module.i пытался отправить китайские символы из функционального модуля в PHP, но на стороне PHP я получаю китайские символы в виде ######,
я не понимаю, с какой стороны проблема, сторона PHP или сторона SAP?
Кто-нибудь дать мне предложение, на какой стороне мне нужно сосредоточиться, чтобы исправить эту проблему? или любой другой способ отправить китайский символ в PHP?
Код FM FM: Имя FN: ZMM_PHP_TO_SAP
t_log-msgty = 'E'.
CONCATENATE p_uname '用户无检料权限' INTO t_log-msgtx SEPARATED BY space.
APPEND t_log.
PHP-код:
$LOGIN = array ("ASHOST"=>$row_login1["sap_server"],
"SYSNR"=>$row_login1["sap_system_number"],
"CLIENT"=>$row_login1["sap_client"],
"USER"=>$row_login1["sap_username"],
"PASSWD"=>$row_login1["sap_password"],
"CODEPAGE"=>"8300");
$rfc = saprfc_open ($LOGIN);
if(!$rfc){
$error=saprfc_error();
return "The RFC connection has failed with the following error:".saprfc_error();
exit;}
$fce = saprfc_function_discover($rfc,"ZMM_PHP_TO_SAP");
if(!$fce){
return "The function module has failed.";
return $rfc;
exit;}saprfc_import ($fce,"P_UNAME","demo-china");
saprfc_table_init ($fce,"T_LOG");
// Call and execute the function
$rc = saprfc_call_and_receive ($fce);
if ($rfc_rc != SAPRFC_OK){
if ($rfc == SAPRFC_EXCEPTION ){
echo ("Exception raised: ".saprfc_exception($fce));
} else {
echo ("Call error: ".saprfc_error($fce));
}
echo "failure";
exit;
}
$data_row = saprfc_table_rows ($fce,"T_LOG");
$log_msg='';
if($data_row != 0 || $data_row != '')
{
for ($i=1; $i<=$data_row; $i++)
{
$DATA = saprfc_table_read ($fce,"T_LOG",$i);
echo $DATA['MSGTX'];
if($DATA['MSGTY'] == "E")
{
$log_msg =$DATA['MSGTX'];
}
if($DATA['MSGNO'] == "D")
{
$log_msg ="D";
}
}
}
если вы хотите напечатать $ DATA [‘MSGTX’], вывод будет DEMO-CHINA ¥ Î ### ®Æ #, как получить точные китайские иероглифы.
заранее спасибо.
Прежде всего, вы должны никогда жесткие символы символов / строки на любом языке программирования и особенно в ABAP. В большинстве случаев системы SAP являются многоязычными системами, которые распространяются на международном уровне, поэтому символы, жестко закодированные в одной среде, могут интерпретироваться по-разному в другой среде. В срок среда Я имею в виду язык входа в систему, параметры пользователя и так далее.
Следовательно, мы не знаем точно, как будут обрабатываться литералы во время вызова вашего FM, возможные шаги, которые мы можем сделать в этом случае, следующие:
CONCATENATE
заявление в текст-символ. Текстовые символы — это рекомендуемый способ хранения символьных строк в ABAP.Затем я рекомендую вам проверить, является ли ваша система SAP Unicode. Это можно сделать через Система> Статус> Система Unicode меню. Весьма маловероятно, что ваша система не поддерживает Unicode, но, тем не менее, эта проверка настоятельно рекомендуется.
[Необязательный] Этот шаг является необязательным и имеет смысл только в том случае, если ваша система не поддерживает Unicode, тем не менее, он будет полезен в любом случае. Установите кодовую страницу вашей среды на китайский по заявлению
SET LOCALE LANGUAGE 1.
Положите заявление в начало для FM.
Также будет разумно убедиться, что проверки системы Unicode включены в вашем функциональном модуле. Для этого вы должны пойти в Перейти к> Основной программе> Перейти к> Атрибуты и убедитесь, что Юникод проверяет активную галочку активен
Других решений пока нет …