首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过RFC将汉字从SAP发送到PHP?

如何通过RFC将汉字从SAP发送到PHP?
EN

Stack Overflow用户
提问于 2016-01-21 03:16:38
回答 2查看 944关注 0票数 0

我正在使用函数模块通过RFC与PHP进行通信,我试图将汉字从函数模块发送到PHP,但在PHP方面,我使用的是######格式的中文字符,

我不明白问题出在哪一边,是PHP方面还是SAP方面?有人给我建议,我需要集中哪方面来纠正这个问题?或者其他将汉字发送到PHP的方法?

SAP代码:FN名称: ZMM_PHP_TO_SAP

代码语言:javascript
复制
     t_log-msgty = 'E'.
    CONCATENATE p_uname '用户无检料权限' INTO t_log-msgtx SEPARATED BY space.
    APPEND t_log.

PHP代码:

代码语言:javascript
复制
 $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‘的输出是演示-中国¥Î###®Æ#­­,如何获得准确的汉字。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-10 08:45:24

终于找到答案了。

代码语言:javascript
复制
$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解决了我的问题

票数 1
EN

Stack Overflow用户

发布于 2016-02-15 12:12:59

首先,在任何编程语言中,特别是在中,您都不应该使用硬编码字符/字符串。在大多数情况下,SAP系统是多语言系统,在国际上通用,因此在一个环境中硬编码的符号可以在另一个环境中进行不同的解释。在术语环境下,我指的是登录语言、用户参数等。

因此,我们不知道在调用FM期间文本将如何处理,在这种情况下我们可以采取的步骤如下:

  1. 首先,将CONCATENATE语句中的文字转换为文本符号。文本符号是ABAP中存储字符串的推荐方法。
  2. 然后,我建议您检查SAP系统是否是Unicode。这可以通过System > Status > Unicode系统菜单来完成。您的系统不太可能是非Unicode,但是,这种检查是非常感谢的。
  3. 可选这个步骤是可选的,只有当您的系统不是Unicode时才有意义,尽管如此,它还是很有用的。通过语句将您的环境代码页设置为中文 设置地区语言1。 把这句话放在FM的开头。
  4. 此外,确保在功能模块中启用Unicode系统检查也是明智的。要做到这一点,您应该转到>主程序>转到>属性,并确保Unicode检查活动复选框是活动的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34914796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档