Delphi Can

Orjinalini görmek için tıklayınız: html de kullanınal özel karakterler
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba Arkadaşlar,

Delphi'de yazılımış web tabanlı bir program üzerinden windows file server klasör listesini alıyoruz. fakat klasörlerde kullanılan özel karekterleri okumada zorlanıyoruz.

?&=:

insert into file_type_shared_folders (server_id,parent_id,folder_name,full_path, parents_list) values("1", "1", "GGG_&&&& ^^&&&@@@@[)]4", "\\\\filesrver.HISAR.LOCAL\\FileShareEMin\\GGG_&&&& ^^&&&@@@@[)]4",".0..1.")

böyle bir insert var. normalde heidisql de yapsam GGG_&&&& ^^&&&@@@@[)]4    klasör bu şekilde ekleniyor

ama normal delphide Query ile eklendiğinde GGG_&&&& ^^&&@@@@[)]4 böyle ekleniyor


yani & in bir tanesi kayboluyor
Web tabanlı içerik Delphi yakasında mı yoksa Web üzerinde PHP vb. bir yapıda mı kaydediliyor ?

Eğer PHP yakasında ise bu linki kontrol etmek isteyebilirsiniz. ( mysql_real_escape_string )

Kod:
<?php
   include("connect.php");
   $bodyData = "Bolliger&Mabillard%is a rollercoaster manufacturer";
   $bodyData = mysql_real_escape_string($bodyData);
   $query="insert into news (title, body) values('About', '".$bodyData."')";
   $run = mysql_query($query) or die ($query);
   mysql_close();
?>
Hocam,

post edilen datalar vasıtası ile TFDQuery; ile kaydediliyor
Bahsi geçen string path verisi Delphi yakasına POST edildiğini anlıyorum.
Meraktan soruyorum, Delphi yakasına gönderen ( path okuyan ) yapı nedir ? Orada örnek olarak 10 tane '&' karakteri yan yana POST edildiğinde Delphi yakası bunu alırken nasıl alıyor kontrol edebiliyor musunuz ?
Gönderirken base64 ile encode edip, alırken de base64 ile decode etseniz sorun olmaz gibi sanki...
(24-04-2021, Saat: 19:02)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Bahsi geçen string path verisi Delphi yakasına POST edildiğini anlıyorum.
Meraktan soruyorum, Delphi yakasına gönderen ( path okuyan ) yapı nedir ? Orada örnek olarak 10 tane '&' karakteri yan yana POST edildiğinde Delphi yakası bunu alırken nasıl alıyor kontrol edebiliyor musunuz ?

hocam yapı şöyle,
TDirectory.GetDirectories(path) ile dizinleri alıyoruz. dizin adlarında html de kullanılan özel karakterler olunca ve buradan gelen path ajax ile post verisi olduğundan delphi tarafına gidince (delphi tarafındaki bir http server) bu karakterlerden dolayı parçalanıyor. özel karakter ile replace ettik mesela & işareti için %26 gibi karakterlerle replace ettiğimizde veri gidiyor ama bukezde sql i aşağıdaki gibi bir insert işlemi yaptığımda ^^&&& olan kısım ne hikmetse ^^&& şeklinde ekleniyor dolayısıyla doğru kayıt girilmiyor. aynı insert heidisql ile query penceresinden çalıştırıca normal bir şekilde kaydediyor. base64 ile kodlasam bile sonuçta delphi ayağına gelince orjinalini almam lazım ki o da aşağıdaki gibi bir data oluyor yani \\\\filesrver.HISAR.LOCAL\\FileShareEMin\\GGG_&&&& ^^&&&@@@@[)]4 bir path gireceğim ama db ye insert edilen \\\\filesrver.HISAR.LOCAL\\FileShareEMin\\GGG_&&&& ^^&&@@@@[)]4 bu şekilde oluyor. ilginç olan burası. bunu TFDQuery nesnesi mi yapiyor onuda tam olarak bilmiyorum.
PHP Kod:
insert into file_type_shared_folders (server_id,parent_id,folder_name,full_pathparents_listvalues("1""1""GGG_&&&& ^^&&&@@@@[)]4""\\\\filesrver.HISAR.LOCAL\\FileShareEMin\\GGG_&&&& ^^&&&@@@@[)]4",".0..1."
Sorun karakter unicode vb. kodlaması sorunu desem sadece tek karakter eksiltmesi olmazdı. Çünkü bütüne etkisi olurdu.

FDQuery'ye parametre ile bunu girmek ama girerken AsString değilde AsWideString olarak denemek isteyebilirsiniz.

 FDQuery1.SQL.Text:= 'insert into file_type_shared_folders (server_id,parent_id,folder_name,full_path, parents_list) values("1", "1", :param00, :param01,".0..1.") '
 FDQuery1.Params[0].AsWideString := 'GGG_&&&& ^^&&&@@@@[)]4';
 FDQuery1.Params[1].AsWideString := '\\\\filesrver.HISAR.LOCAL\\FileShareEMin\\GGG_&&&& ^^&&&@@@@[)]4';
 FDQuery1.ExecSQL;
(24-04-2021, Saat: 23:46)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Sorun karakter unicode vb. kodlaması sorunu desem sadece tek karakter eksiltmesi olmazdı. Çünkü bütüne etkisi olurdu.

FDQuery'ye parametre ile bunu girmek ama girerken AsString değilde AsWideString olarak denemek isteyebilirsiniz.

 FDQuery1.SQL.Text:= 'insert into file_type_shared_folders (server_id,parent_id,folder_name,full_path, parents_list) values("1", "1", :param00, :param01,".0..1.") '
 FDQuery1.Params[0].AsWideString := 'GGG_&&&& ^^&&&@@@@[)]4';
 FDQuery1.Params[1].AsWideString := '\\\\filesrver.HISAR.LOCAL\\FileShareEMin\\GGG_&&&& ^^&&&@@@@[)]4';
 FDQuery1.ExecSQL;

hocam param ile insert işlemi halloldu teşekkürler. şimdi de şöyle bir durum söz konusun
TDirectory.GetDirectories(path) ile dizinleri okurken türkçe karakterleri okumuyor karakterleri ingilizceye çeviriyor. meslea şğüıç şeklide bir dizini sguic şeklinde okuyor. TDirectory.GetDirectories nin encode özelliği yok sanırım. bunu nasıl çözebilirim. dizinlerin ismini türkçe karakter olarak okumak gereiyor. reelde bu dizin var aslında ama dizin ismi doğru gelmediğinden dizini sonraki işlemlerde bulamadığından işlem yapamıyoruz. bu konuda bir öneriniz var mıdır?
Aşağıdaki şekilde denedim Türkçe klasör isimleri doğru geldi...

Uses System.IOUtils, System.Types;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  LDirs : TStringDynArray;
  i     : Integer;
begin
  LDirs := System.IOUtils.TDirectory.GetDirectories( 'c:\ARMAN.Study\Video(s)\' );
  for i := 0  to High(LDirs) do
    Memo1.Lines.Add(LDirs[i]);
end;


m2oyg4779qvoemo7gfxy.gif
Hocam,
Yapı aynı fakat bizimki web servis olduğundan respons tarafı utf8 set ettik TR karekter sorunu çözüldü. .