2016-01-21 90 views
0

我正在通過RFC使用函數module.i嘗試從功能模塊向PHP發送中文字符,但在PHP端,我正在以######形式獲取中文字符,如何通過RFC將SAP中文字符發送到PHP?

i不明白問題出在哪邊,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"; 

      } 

     } 
    } 

時itry打印$ DATA [ 'MSGTX']輸出DEMO-中國¥##Î #Æ#,如何得到確切的中文字符。 在此先感謝。

+0

你使用什麼功能模塊?你使用什麼PHP服務器? – Suncatcher

+0

SAP功能模塊,通過RFC連接進行連接,並使用Apache服務器。 –

+0

你的意思是你從外部(從Apache環境中)調用一些支持遠程功能的FM?你打電話給哪個功能模塊?是Z模塊還是標準?你能說出它的名字嗎? – Suncatcher

回答

0

首先,你應該從來沒有硬編碼字符字符/字符串在任何編程語言,特別是在ABAP。在大多數情況下,SAP系統是多語言系統,可在國際上使用,因此在一個環境中硬編碼的符號在另一個環境中可能會有不同的解釋。根據術語環境我的意思是登錄語言,用戶參數等。

因此,我們不知道到底有文字將你的FM的通話過程中被處理的方式,我們可以使可能的步驟,在這種情況下以下幾點:

  1. 首先,轉換你的文字中CONCATENATE聲明到text-symbol。文本符號是在ABAP中存儲字符串的推薦方式。
  2. 然後我建議你檢查你的SAP系統是否是Unicode。這可以通過System> Status> Unicode system菜單完成。你的系統不是非Unicode的,但是,儘管如此,這個檢查非常感謝。

  3. [可選]這一步是可選的,只有當您的系統是非Unicode的時候纔有意義,不過無論如何它都會很有用。通過聲明將您的環境代碼頁設置爲中文

    SET LOCALE LANGUAGE 1. 
    

    將聲明放入FM的開頭。

  4. 此外,確保在您的功能模塊中啓用Unicode系統檢查將是明智的。爲此,您應該去轉到>主程序>轉到>屬性並確保Unicode檢查活動複選框處於活動狀態。

+0

正如你所說我已遵循你的步驟,但仍然是我一樣,在汁液方面我得到適當的輸出。但在PHP方面它不工作。 –

相關問題