Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   PHP / Rest DataSnap (https://www.clubdelphi.com/foros/showthread.php?t=91472)

Rockin 14-02-2017 00:51:29

PHP / Rest DataSnap
 
Hola, a ver si alguien me ilumina, tengo un servidor rest datasnap que recibe en unos de sus métodos una cadena enviada por php desde una web, pero no consigo codificar bien las tildes y la ñ. En el php hago: utf8_encode("EÑE ÓLA") lo que me lo convierte a EÑE ÓLA que es en UTF8 y en el servidor rest todas las rutinas que vienen en:
http://docwiki.embarcadero.com/RADSt...rsion_Routines
Pero no hay forma, he probado con el tipo de campo varchar y nvarchar de SQL server.
Si alguien tiene una idea que puede ser.
Gracias.

AgustinOrtu 14-02-2017 02:14:19

Vamos por partes, no podes depurar el servidor y ver "que es lo que recibes"? Despues te peleas con la base de datos para ver como lo guardas.

Tambien es importante el como lo lees desde la BD

Rockin 14-02-2017 08:00:37

Envio Cadena
 
Tanto si envío con utf8_encode como sin eso recibo lo mismo:
E?L ?LA

¿Sabéis que puede ser?

AgustinOrtu 14-02-2017 09:34:26

Solo se me ocurre que pruebes usando las clases para encoding, es decir, streams y TEncoding

Yo creería un TStringStream con el string que viene y pasando como encoding TEncoding.UTF8.

De todos modos me extraña bastante. No podes publicar el código del servidor?

Rockin 14-02-2017 18:53:11

Código Servidor
 
Llega por el php que lo llamo así:

file_get_contents("http://localhost:8080/datasnap/rest/TServidorMetodosPrevengos/insertarSeguimientoCliente/$cadena");

En la variable $cadena concateno todos los parámetros.

El código del servidor es muy tonto.

Código Delphi [-]
function TServidorMetodosPrevengos.insertarSeguimientoCliente( id_UsuarioPrevengo, id_ClientePrevengo,id_EstadoVisita,id_Asesoria,
                                                                   contratoFirmado : integer; fechaVisita,horaVisita: TDateTime;
                                                                   incidencia:AnsiString ): String;
begin
try


       with SPInsertarCliente do
        begin
          Close;
          Params[0].Value;
          Params[1].Value := id_UsuarioPrevengo;
          Params[2].Value := id_ClientePrevengo;
          Params[3].Value := id_EstadoVisita;
          Params[4].Value := fechaVisita; 
          Params[5].Value := horaVisita ;  
          Params[6].Value := contratoFirmado ; 
          Params[7].Value:= id_Asesoria ;
          Params[8].Value:= UTF8Decode(incidencia);
          ExecProc;
          Result:= 'OK'
        end;



except
   on E:Exception do
    Result:=  'Error en el alta del seguimiento. Codigo de error: ' + E.Message;

end;

end;

AgustinOrtu 14-02-2017 19:18:43

Porque usas AnsiString en lugar de string en el servidor?

Por otra parte no soy nada versado en PHP, pero me resulta extraño como invocas al server. Según la documentación deberías estar haciendo un GET a la URL especificada, o POST cuando tenés que mandar parámetros más complejos (ejemplo un JSON, se debe poner en el header y enviar por POST)

Revisa esto http://docwiki.embarcadero.com/RADSt...aging_Protocol

Rockin 14-02-2017 19:43:00

He probado con string, ansistring,widestring, etc...
Los métodos se pueden invocar de varias maneras, esta es una de ellas, también por json, pero la parte php no la hago yo y el chaval que la hace no lo controla bien, era por simplificarlo.

Gracias.

Rockin 14-02-2017 20:03:47

Al final era tan facil como codificar en el PHP rawurlencode ("EÑE ALá ñóé")

AgustinOrtu 14-02-2017 21:49:38

Me alegra que lo hayan podido solucionar y gracias por publicarlo, son pequeños detalles que te salvan tardes enteras ^\||/^\||/


La franja horaria es GMT +2. Ahora son las 15:34:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi