2016-01-21 1 views
0

Je communique avec PHP via RFC en utilisant la fonction module.i j'ai essayé d'envoyer des caractères chinois du module de fonction à PHP, mais en PHP, je reçois des caractères chinois sous forme de ######,Comment envoyer des caractères chinois de SAP à PHP via RFC?

i Vous ne comprenez pas quel est le problème, côté PHP ou côté SAP? quelqu'un me donne une suggestion de quel côté dois-je me concentrer pour rectifier ce problème? ou tout autre moyen d'envoyer un caractère chinois à PHP?

Code SAP FM: FN Nom: ZMM_PHP_TO_SAP

 t_log-msgty = 'E'. 
    CONCATENATE p_uname '用户无检料权限' INTO t_log-msgtx SEPARATED BY space. 
    APPEND t_log. 

Code 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"; 

      } 

     } 
    } 

lorsque itry à imprimer $ DATA [ 'MSGTX'] la sortie est DEMO-Chine sur ¥ Í ## # ®Æ #, comment obtenir des caractères chinois exacts. merci d'avance.

+0

Quel module de fonction utilisez-vous? Quel serveur PHP utilisez-vous? – Suncatcher

+0

Module de fonction SAP, qui se connecte via une connexion RFC et j'utilise le serveur Apache. –

+0

Vous voulez dire que vous appelez une FM à distance depuis l'extérieur (depuis l'environnement Apache)? Quel module de fonction appelez-vous? Est-ce Z-module ou standard? Pouvez-vous le nommer? – Suncatcher

Répondre

0

Tout d'abord, vous devez jamais caractères/caractères de caractère de caractère dur dans n'importe quel langage de programmation et en particulier dans ABAP. Dans la plupart des cas, les systèmes SAP sont des systèmes multilingues, qui sont utilisés au niveau international. Par conséquent, les symboles codés en dur dans un environnement peuvent être interprétés différemment dans un autre environnement. Sous le terme environnement Je veux dire le langage de connexion, les paramètres de l'utilisateur et ainsi de suite.

Par conséquent, nous ne savons pas exactement la manière dont les littéraux seront traités pendant un appel de votre FM, les mesures possibles que nous pouvons faire dans ce cas suivent:

  1. Tout d'abord, convertir votre littérale en CONCATENATE déclaration en text-symbol. Symboles de texte est un moyen recommandé de stocker des chaînes de caractères dans ABAP.
  2. Ensuite, je vous recommande de vérifier si votre système SAP est Unicode. Cela peut être fait via Système> État> Système Unicode menu. Il est hautement improbable que votre système soit non-Unicode mais, néanmoins, cette vérification est fortement appréciée. Cette option est optionnelle et n'a de sens que si votre système est non-Unicode, néanmoins, il serait utile quand même. Définissez votre page de code d'environnement en chinois par la déclaration

    SET LOCALE LANGUAGE 1. 
    

    Mettez l'instruction en début de FM.

  3. Il est également judicieux de vérifier que les vérifications du système Unicode sont activées dans votre module fonction. Pour cela, vous devez aller à Allez dans> Programme principal> Aller à> Attributs et assurez-vous que Unicode cocher actif case est active.

+0

comme vous l'avez dit j'ai suivi vos pas, mais je reçois toujours la même chose, du côté de la sève je reçois une sortie correcte. mais du côté PHP, ça ne marche pas. –