![]() |
Delphi-Version: 10.2 Tokyo
Doppelte Hochkommata
Hallo,
ich bekomme per REST folgende URL: dmsDocObj.URL := ![]() 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:
Wie bekomme ich die ersetzt durch einzelne? '' --> ' |
AW: Doppelte Hochkommata
Bei mir funktionierts so
Delphi-Quellcode:
lg
s = StringReplace(dmsDocObj.URL, '''''', '''', [rfReplaceALL]);
|
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]);
|
AW: Doppelte Hochkommata
oder
Delphi-Quellcode:
s := ReplaceStr(dmsDocObj.URL, #39#39, #39);
oder
Delphi-Quellcode:
s := ReplaceStr(dmsDocObj.URL, '''''', '''');
oder
Delphi-Quellcode:
(das Gegenteil vom
s := AnsiDequotedStr(dmsDocObj.URL, '''');
![]() ![]() oder |
AW: Doppelte Hochkommata
Zitat:
|
AW: Doppelte Hochkommata
Wir hätten auch noch was mit RegEx
oder verschiedene FOR-Schleifen oder ...
Delphi-Quellcode:
:duck:
for var i := 1 to S.Length do if Copy(S, i, 2) = '''''' then Delete(S, i, 1);
und nein, es werden nicht alle ' gelöscht, auch wenn es vielleicht so aussieht :stupid: |
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; |
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=' |
AW: Doppelte Hochkommata
Auch dies
Delphi-Quellcode:
hilft leider nicht.
for var i := 1 to S.Length do if Copy(S, i, 2) = '''''' then Delete(S, i, 1);
|
AW: Doppelte Hochkommata
Delphi-Quellcode:
s2 wird im interessanten Bereich (Dokar=''LDP'') nacheinander
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; 'Do' 'ok' 'ka' 'ar' 'r=' '=''' '''L' 'LD'
Delphi-Quellcode:
wird nie wahr
if s2 = '''''' then
Delphi-Quellcode:
löscht die beiden führenden Hochkommata (gekürzt):
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; 'Dokar=LDP''...... |
AW: Doppelte Hochkommata
Was passiert, wenn man die doppelten einfachen Hochkommata auswechselt auf doppelte Hochkommata chr(34) ?
|
AW: Doppelte Hochkommata
Zitat:
Delphi-Quellcode:
bleiben die doppelten einfachen Hochkommata
s := ReplaceStr(dmsDocObj.URL, '''''', '""');
|
AW: Doppelte Hochkommata
Zitat:
Delphi-Quellcode:
Was kommt da raus?
s := dmsDocObj.URL;
s2 := ''; for p := 1 to s.length do begin s2 := Format('%s#%.3d',[s2,Ord(Copy(s, p, 1))]); end; ShowMessage(s2); Steht dadrinne irgendwo #061#039#039#076#068#080#039#039? Wenn nein, was sind die zwei Zeichen vor #076#068#080 und was die zwei Zeichen dahinter? Die Url im Eingangspost läßt sich im FireFox ohne besagte Fehlermeldung aufrufen. Poste bitte mal die Originalurl aus dmsDocObj.URL (alles ab /sap/) zwischen [code]hier die Url einfügen[/code]-Tags. |
AW: Doppelte Hochkommata
Zitat:
Delphi-Quellcode:
Also nur durch ein einziges doppeltes HK ersetzen.
StringReplace(dmsDocObj.URL, '''''', '"', [rfReplaceAll]);
... oder besser lesbar ... StringReplace(dmsDocObj.URL, chr(39) + chr(39), chr(34), [rfReplaceAll]); |
AW: Doppelte Hochkommata
Wird im Debugger das doppelte '' angezeigt, oder ist es wirklich drin?
Im Debugger sieht ein ab'cd natürlich aus wie
Delphi-Quellcode:
, genauso wie im Quellcode, aber IM String ist natürlich nur ein '.
'ab''cd'
|
AW: Doppelte Hochkommata
Zitat:
Code:
'/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar=''LDP'',Doknr=''10043643970'',Doktl=''000'',Dokvr=''00'')/$value'
Delphi-Quellcode:
ergibt
s := StringReplace(dmsDocObj.URL, chr(39) + chr(39), chr(34), [rfReplaceAll]);
Code:
'/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar=''LDP'',Doknr=''10043643970'',Doktl=''000'',Dokvr=''00'')/$value'
|
AW: Doppelte Hochkommata
Zitat:
|
AW: Doppelte Hochkommata
Zitat:
Delphi-Quellcode:
s := dmsDocObj.URL;
s2 := ''; for p := 1 to s.length do begin s2 := Format('%s#%.3d',[s2, Ord(Copy(s, p, 1)[1] )]); end;
Code:
Es steht nur jeweils ein #039 davor und danach. Damit wäre der String korrekt und ich muss den Fehler an anderer Stelle suchen...:oops:
'#104#116#116#112#115#058#047#047#102#102#112#112#097#115#046#097#100#046#107#108#105#110#105#107#046#117#110#105#045#117#108#109#046#100#101#058#056#052#052#051#047#115#097#112#047#111#112#117#047#111#100#097#116#097#047#115#097#112#047#090#095#073#083#072#077#069#068#095#066#065#083#073#067#095#065#080#073#095#083#082#086#047#100#111#099#117#109#101#110#116#115#083#101#116#040#068#111#107#097#114#061#039#076#068#080#039#044#068#111#107#110#114#061#039#049#048#048#052#051#054#052#051#057#055#048#039#044#068#111#107#116#108#061#039#048#048#048#039#044#068#111#107#118#114#061#039#048#048#039#041#047#036#118#097#108#117#101'
|
AW: Doppelte Hochkommata
Zitat:
Angezeigt/kopiert wird die Schreibweise der String-Konstante. Darum auch vorne und hinten noch je ein ' Wären es wirklich Doppelte, dann sähe es so aus
Delphi-Quellcode:
'/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar=''''LDP'''',Doknr=''''10043643970'''',Doktl=''''000'''',Dokvr=''''00'''')/$value'
Delphi-Quellcode:
'/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar=''LDP'',Doknr=''10043643970'',Doktl=''000'',Dokvr=''00'')/$value'
entspricht /sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar='LDP',Doknr='10043643970',Doktl ='000',Dokvr='00')/$value die Konstante hätte aber auch z.B. so aussehen können
Delphi-Quellcode:
'/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar='#39'LDP'#39',Doknr='#39'10043643970'#39',Doktl='#39'000'#39',Dokvr='#39'00'#39')/$value'
oder in der ausführlichen Schreibweise
Delphi-Quellcode:
'/sap/opu/odata/sap/Z_ISHMED_BASIC_API_SRV/documentsSet(Dokar=' + #39 + 'LDP' + #39 + ',Doknr=' + #39 + '10043643970' + #39 + ',Doktl=' + #39 + '000' + #39 + ',Dokvr=' + #39 + '00' + #39 + ')/$value'
oder oder oder ... Ein doppeltes '' in der String-Konstante ist ein '-Zeichen. Ein einfaches ' am Anfang/Ende/Dazwischen ist der Anfange oder das Ende der Konstante. Und ''' am Anfang oder Ende sind der Anfang/Ende plus ein '-Zeichen. Ähnlich wie in C-Sprachen ein \-Zeichen als \\ in String-Konstanten steht. |
AW: Doppelte Hochkommata
Zitat:
" entspricht %39 als urlcodierter Wert. Alle hier erwähnten Lösungen konvertieren den Text in Delphi Syntax, aber lösen nicht den Grundfehler, dass die URL nicht korrekt codiert ist. EDIT: Das letzte %39 in meienem obigen Beispiel darf kein Leerschlag enthalten! Also immer %39, da macht die Forumsoftware irgend was damit falsch. |
AW: Doppelte Hochkommata
Danke an alle für die Hilfe
|
AW: Doppelte Hochkommata
War das % nicht Hexadezimal?
also %27 nicht 39 (aka #39 vs. #$27 ) PS: Irgendwo wird es bestimmt ein UrlEncode (oder sowas) dafür geben. |
AW: Doppelte Hochkommata
Zitat:
Delphi-Quellcode:
in System.NetEncoding. Naheliegend, oder?
TURLEncoding
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz