Wir übergeben einen öffentlichen ssh-Schlüssel über einen API-Aufruf mit POST. Die seltsame Sache ist, wenn wir den Wert in PHP erhalten, werden die Pluszeichen (+) vollständig entfernt. Dies funktioniert natürlich nicht, da es den Wert des öffentlichen Schlüssels ändert.
Siehe folgende rohe Curl-Anforderung:
%Vor% Aber wenn wir den Wert von $ _POST ['key'] in unserem PHP var_dump()
out setzen, ist es:
Irgendeine Idee, was die Pluszeichen verursacht, die entfernt werden?
+
in URLs wird von den meisten Servern als codierter Bereich (wie %20
) interpretiert.
Sie müssen es als %2B
kodieren. Anstatt -d/--data
zu verwenden, verwenden Sie cURLs --data-urlencode
parameter [ man curl ] um dies zu tun. Dies wurde zu curl
im Januar 2009 [ Veröffentlichung ] hinzugefügt. < sup>, so dass ältere Systeme, die nicht aktualisiert wurden, dies möglicherweise nicht unterstützen.
PHPs rawurlencode
[ php docs ] erfüllt die gleiche Funktion .
Und wenn die Daten auf der anderen Seite (Server) zugegriffen werden, wird es bereits automatisch decodiert.
So wird rawurldecode
[ php docs ] im PHP-Code nicht benötigt , es würde nur Dinge durcheinander bringen.
Sie müssen eine geeignete URL-codierte Zeichenfolge an das Datenargument für curl übergeben. Sie können einen Online-URL-Encoder für einmalige Situationen verwenden.
Haben Sie magische Anführungszeichen eingeschaltet?
Hier ist eine bestehende Frage, die ein ähnliches Problem anspricht: Warum werden $ _POST-Variablen in PHP ausgeblendet?
Sie müssen URLs auch codieren, selbst wenn sie nicht wie ein get-Wert direkt in die URL gehen.