我正在使用函数模块通过RFC与PHP进行通信,我试图将汉字从函数模块发送到PHP,但在PHP方面,我使用的是######格式的中文字符,
我不明白问题出在哪一边,是PHP方面还是SAP方面?有人给我建议,我需要集中哪方面来纠正这个问题?或者其他将汉字发送到PHP的方法?
SAP代码: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‘的输出是演示-中国¥Î###®Æ#,如何获得准确的汉字。提前谢谢。
发布于 2019-07-10 08:45:24
终于找到答案了。
$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"=>"4110");CODEPAGE从8300到4110解决了我的问题
发布于 2016-02-15 12:12:59
首先,在任何编程语言中,特别是在中,您都不应该使用硬编码字符/字符串。在大多数情况下,SAP系统是多语言系统,在国际上通用,因此在一个环境中硬编码的符号可以在另一个环境中进行不同的解释。在术语环境下,我指的是登录语言、用户参数等。
因此,我们不知道在调用FM期间文本将如何处理,在这种情况下我们可以采取的步骤如下:
CONCATENATE语句中的文字转换为文本符号。文本符号是ABAP中存储字符串的推荐方法。https://stackoverflow.com/questions/34914796
复制相似问题