Как отправить китайские иероглифы из SAP в PHP через RFC?

я общаюсь с PHP через RFC с помощью функционального модуля. Я пытался отправить китайские иероглифы из функционального модуля в PHP, но на стороне PHP я получаю китайские иероглифы в виде ######,

я не понимаю, на какой стороне проблема, либо на стороне PHP, либо на стороне SAP? Кто-нибудь подскажет, на какой стороне мне нужно сосредоточиться, чтобы решить эту проблему? или любой другой способ отправить китайский иероглиф в PHP?

Код SAP 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 ¥Î###®Æ# , как получить точные китайские символы. заранее спасибо.


person Archana Palani    schedule 21.01.2016    source источник
comment
Какой функциональный модуль вы используете? Какой PHP-сервер вы используете?   -  person Suncatcher    schedule 21.01.2016
comment
Функциональный модуль SAP, который подключается через соединение RFC, и я использую сервер Apache.   -  person Archana Palani    schedule 03.02.2016
comment
Вы имеете в виду, что вы вызываете какой-то удаленный FM извне (из среды Apache)? Какой функциональный модуль вы вызываете? Это Z-модуль или стандарт? Можете ли вы назвать это?   -  person Suncatcher    schedule 03.02.2016
comment
да, я вызываю FM с удаленным доступом из SAP, используя сервер Apache, да, его Z-Module.ex, ZMM_SEND_TO_PHP, который создан в SAP.   -  person Archana Palani    schedule 15.02.2016
comment
Мы не сможем вам помочь, пока не получим код вашего Z-модуля   -  person Suncatcher    schedule 15.02.2016
comment
@Suncatcher в функциональном модуле я напрямую отправляю китайские иероглифы через таблицу, когда получаю эти китайские иероглифы, которые не приходят в правильном формате.   -  person Archana Palani    schedule 15.02.2016
comment
Мы телепаты? Как мы можем себе представить, что вы делаете в своем FM. Бессмысленный разговор без кода.   -  person Suncatcher    schedule 15.02.2016
comment
@Suncatcher, извини за это, не мог бы ты помочь мне сейчас?   -  person Archana Palani    schedule 15.02.2016


Ответы (2)


Наконец нашел ответ.

$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 решает мою проблему

person Archana Palani    schedule 10.07.2019

Прежде всего, вы не должны никогда жестко кодировать символьные символы/строки в любом языке программирования, особенно в ABAP. В большинстве случаев системы SAP являются многоязычными системами, которые используются на международном уровне, поэтому символы, жестко закодированные в одной среде, могут по-разному интерпретироваться в другой среде. Под термином среда я подразумеваю язык входа в систему, пользовательские параметры и так далее.

Поэтому мы не знаем точно, как будут обрабатываться литералы при вызове вашего FM, возможные шаги, которые мы можем предпринять в этом случае, следующие:

  1. Прежде всего, преобразуйте свой литерал в операторе CONCATENATE в text-symbol< /а>. Текстовые символы — это рекомендуемый способ хранения строк символов в ABAP.
  2. Затем я рекомендую вам проверить, поддерживает ли ваша система SAP Unicode. Это можно сделать через меню Система > Статус > Система Unicode. Крайне маловероятно, что ваша система не поддерживает Unicode, но, тем не менее, эта проверка приветствуется.

  3. [Необязательно] Этот шаг является необязательным и имеет смысл только в том случае, если ваша система не поддерживает Unicode, тем не менее, он в любом случае будет полезен. Установите кодовую страницу вашей среды на китайский язык с помощью инструкции

    SET LOCALE LANGUAGE 1.
    

    Поместите заявление в начало FM.

  4. Также будет разумно убедиться, что проверка системы Unicode включена в вашем функциональном модуле. Для этого вам нужно перейти в раздел Перейти > Основная программа > Перейти > Атрибуты и убедиться, что флажок Unicode Checks Active активен.

person Suncatcher    schedule 15.02.2016
comment
как вы сказали, я следовал вашим шагам, но все равно получаю то же самое, на стороне сока я получаю правильный результат. но на стороне PHP это не работает. - person Archana Palani; 18.02.2016