Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Doppelte Hochkommata (https://www.delphipraxis.net/212932-doppelte-hochkommata.html)

tewes 26. Apr 2023 15:45

Delphi-Version: 10.2 Tokyo

Doppelte Hochkommata
 
Hallo,

ich bekomme per REST folgende URL:
dmsDocObj.URL :=
https://ffppas.XXX.de:8443/sap/opu/o...entsSet(Dokar=''TUP'',Doknr=''10043430922'',Doktl=''000'',Dokvr=''00'')/$value

Im Browser führen dann die doppelten Hochkommata zu einer Fehlermeldung: "Die Anforderungs-URI enthält ein ungültiges Schlüsselprädikat."

Folgendes habe ich versucht:
  • s := StringReplace(dmsDocObj.URL, #27#27, #27, [rfReplaceAll]);
  • s := StringReplace(dmsDocObj.URL, #27#27, '%27', [rfReplaceAll]);
  • s := AnsiDequotedStr(dmsDocObj.URL, #27);
  • s := StringReplace(dmsDocObj.URL, #27#27, '*', [rfReplaceAll]);
  • s := StringReplace(s, '*', #27, [rfReplaceAll]);


Wie bekomme ich die ersetzt durch einzelne?
'' --> '

IceBube 26. Apr 2023 16:10

AW: Doppelte Hochkommata
 
Bei mir funktionierts so

Delphi-Quellcode:
s = StringReplace(dmsDocObj.URL, '''''', '''', [rfReplaceALL]);
lg

milos 26. Apr 2023 16:13

AW: Doppelte Hochkommata
 
Es scheint als würdest du einfach Hexadezimale und Dezimale Were vertauschen. :)

#27 ist ASCII Dezimal 27 also ein ESCAPE. Um ' darzustellen, musst du 27 Hexadezimal nehmen, also #$27 (Mit dem Dollar Zeichen) oder 39 Dezimal, also #39.

Delphi-Quellcode:
s := StringReplace(dmsDocObj.URL, #$27#$27, #$27, [rfReplaceAll]);

himitsu 26. Apr 2023 16:19

AW: Doppelte Hochkommata
 
oder
Delphi-Quellcode:
s := ReplaceStr(dmsDocObj.URL, #39#39, #39);

oder
Delphi-Quellcode:
s := ReplaceStr(dmsDocObj.URL, '''''', '''');

oder
Delphi-Quellcode:
s := AnsiDequotedStr(dmsDocObj.URL, '''');
(das Gegenteil vom Delphi-Referenz durchsuchenQuotedStr, bzw. eigentlich Delphi-Referenz durchsuchenAnsiQuotedStr)
oder

IceBube 26. Apr 2023 20:32

AW: Doppelte Hochkommata
 
Zitat:

Zitat von himitsu (Beitrag 1521579)
oder
Delphi-Quellcode:
s := ReplaceStr(dmsDocObj.URL, #39#39, #39);

oder
Delphi-Quellcode:
s := ReplaceStr(dmsDocObj.URL, '''''', '''');

oder
Delphi-Quellcode:
s := AnsiDequotedStr(dmsDocObj.URL, '''');
(das Gegenteil vom Delphi-Referenz durchsuchenQuotedStr, bzw. eigentlich Delphi-Referenz durchsuchenAnsiQuotedStr)
oder

Diese Entscheidungen..furchtbar XD

himitsu 26. Apr 2023 21:43

AW: Doppelte Hochkommata
 
Wir hätten auch noch was mit RegEx
oder verschiedene FOR-Schleifen
oder ...





Delphi-Quellcode:
for var i := 1 to S.Length do if Copy(S, i, 2) = '''''' then Delete(S, i, 1);
:duck:
und nein, es werden nicht alle ' gelöscht, auch wenn es vielleicht so aussieht :stupid:

Uwe Raabe 26. Apr 2023 23:01

AW: Doppelte Hochkommata
 
Probier doch mal dieses (erfordert System.Sysutils):
Delphi-Quellcode:
S := dmsDocObj.URL.DeQuotedString;
// alternativ, wenn URL kein regulärer String ist
S := string(dmsDocObj.URL).DeQuotedString;

tewes 27. Apr 2023 09:10

AW: Doppelte Hochkommata
 
Vielen Dank für die Lösungsvorschläge!

Das habe ich versucht:
s := dmsDocObj.URL.DeQuotedString; // Vorschlag Uwe Raabe
s := StringReplace(dmsDocObj.URL, '''''', '''', [rfReplaceAll]); // Vorschlag IceBube
s := StringReplace(dmsDocObj.URL, #$27#$27, #$27, [rfReplaceAll]); // Vorschlag milos
s := ReplaceStr(dmsDocObj.URL, #39#39, #39); // Vorschlag himitsu
s := AnsiDequotedStr(dmsDocObj.URL, ''''); // Vorschlag himitsu

Leider keine Änderung.


Wenn ich im Debugger auf "Wert ändern" gehe und jeweils die beiden Hochkommata gegen einzelne austausche
'https://ffppas.XXX.de:8443/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar='LDP',Doknr='10043643970',Doktl ='000',Dokvr='00')/$value'

wird hinter "Dokar=" alles abgeschnitten
'https://ffppas.XXX.de:8443/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar='

tewes 27. Apr 2023 09:17

AW: Doppelte Hochkommata
 
Auch dies
Delphi-Quellcode:
for var i := 1 to S.Length do if Copy(S, i, 2) = '''''' then Delete(S, i, 1);
hilft leider nicht.

tewes 27. Apr 2023 09:52

AW: Doppelte Hochkommata
 
Delphi-Quellcode:
s := dmsDocObj.URL;
for p := 1 to s.length do
begin
  s2 := Copy(s, p, 2);
  if s2 = '''''' then
    Delete(s, p, 1); // Vorschlag himitsu
end;
s2 wird im interessanten Bereich (Dokar=''LDP'') nacheinander
'Do'
'ok'
'ka'
'ar'
'r='
'='''
'''L'
'LD'

Delphi-Quellcode:
if s2 = '''''' then
wird nie wahr

Delphi-Quellcode:
s := dmsDocObj.URL;
for p := 1 to s.length do
begin
  s2 := Copy(s, p, 2);
  if s2 = '=''' then
    Delete(s, p+1, 1);
end;
löscht die beiden führenden Hochkommata (gekürzt):
'Dokar=LDP''......


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz